
Hallo habrozhiteli! Wir haben ein Buch veröffentlicht, das einen Überblick über das Spring 5-Framework und die Entwurfsmuster dafür gibt. Das Prinzip der Abhängigkeitsinjektion wird erläutert, das eine Schlüsselrolle bei der Erstellung von lose gekoppeltem Code im Spring-Framework spielt. Anschließend werden die klassischen Muster der Viererbande beim Entwerfen von Anwendungen im Frühjahr untersucht. In den folgenden Teilen des Buches erläutert der Autor AOP-Muster (Aspect Oriented Programming), JDBC-Muster, mit denen Sie den Datenbankzugriff abstrahieren können. In den letzten Kapiteln des Buches befasst sich der Autor mit der Arbeit mit MVC, reaktiven Entwurfsmustern und Entwurfsmustern, die im Frühjahr bei der gleichzeitigen und parallelen Programmierung verwendet werden.
Wir empfehlen Ihnen, sich mit der Passage „Muster„ Datenzugriffsobjekt ““ vertraut zu machen.
Das Data Access Object (DAO) ist ein äußerst beliebtes Entwurfsmuster für die Persistenzstufe in J2EE-Anwendungen. Es trennt die Geschäftslogikebene von der Aufbewahrungsstufe. Das DAO-Muster basiert auf objektorientierten Prinzipien der Kapselung und Abstraktion. Der Kontext für die Verwendung des DAO-Musters ist der Zugriff auf Daten und deren Speicherung in Abhängigkeit von der spezifischen Implementierung und Art des Speichers, z. B. einer objektorientierten Datenbank, unstrukturierten Dateien, relationalen Datenbanken usw. Basierend auf dem DAO-Muster können Sie eine DAO-Schnittstelle erstellen und implementieren. um alle Aufrufe der Datenquelle zu abstrahieren und zu kapseln. Eine ähnliche DAO-Implementierung verwaltet Datenbankressourcen wie Verbindungen zu einer Datenquelle.
DAO-Schnittstellen lassen sich sehr einfach an alle zugrunde liegenden Mechanismen von Datenquellen anpassen. Sie müssen nicht durch Änderungen der Speichertechnologien auf niedrigeren Ebenen ersetzt werden. Mit diesem Muster können Sie verschiedene Datenzugriffstechnologien implementieren, ohne die Geschäftslogik der Unternehmensanwendung zu beeinträchtigen. Betrachten wir Abb. 8.1 um die Prinzipien des DAO-Musters besser zu verstehen.
Wie Sie im Diagramm sehen können, sind die folgenden Objekte an dem Muster beteiligt.
BusinessObject - ein Objekt, das auf Unternehmensebene arbeitet - ein Client für die Datenzugriffsebene. Er benötigt Daten, um Geschäftsprozesse zu simulieren und Java-Objekte für Zusatzfunktionen oder Anwendungscontroller vorzubereiten.
DataAccessObject ist das Hauptobjekt des DAO-Musters. Versteckt vor BusinessObject die gesamte Implementierung der zugrunde liegenden Datenbank auf niedriger Ebene.
Eine DataSource ist auch ein Objekt, das alle Informationen auf niedriger Ebene darüber enthält, was genau die zugrunde liegende Datenbank ist: RDBMS, unstrukturierte Dateien oder XML.
TransferObject - ein Objekt, das als Speichermedium verwendet wird. Wird vom DataAccessObject verwendet, um Daten an das BusinessObject zurückzugeben.
Betrachten Sie das folgende Beispiel eines DAO-Musters, in dem AccountDao die Schnittstelle eines DataAccessObject ist und AccountDaoImpl eine Klasse ist, die die AccountDao-Schnittstelle implementiert:
public interface AccountDao { Integer totalAccountsByBranch(String branchName); } public class AccountDaoImpl extends JdbcDaoSupport implements AccountDao { @Override public Integer totalAccountsByBranch(String branchName) { String sql = "SELECT count(*) FROM Account WHERE branchName = "+branchName; return this.getJdbcTemplate().queryForObject(sql, Integer.class); } }
Erstellen von DAO-Objekten im Frühjahr mithilfe des Factory-Entwurfsmusters
Wie Sie wissen, sind viele Entwurfsmuster im Spring-Framework enthalten. Das Factory-Muster ist ein generisches Entwurfsmuster und wird verwendet, um ein Objekt zu erstellen, ohne dem Client die zugrunde liegende Logik preiszugeben, und um dem Aufrufer über eine gemeinsame Schnittstelle oder abstrakte Klasse ein neues Objekt zuzuweisen. Dank der Factory-Methode und der Abstract Factory-Entwurfsmuster kann eine sehr hohe Flexibilität des DAO-Musters erreicht werden.
Wir werden herausfinden, wo wir in unserem Beispiel die Strategie implementieren, in der die Factory DAO-Objekte für die Implementierung einer gemeinsamen Datenbank erstellt (Abb. 8.2).
Sie können im vorherigen Diagramm sehen, dass AccountDaoFactory ein AccountDao-Objekt erzeugt, das heißt, es ist eine Factory dafür. Die zugrunde liegende Datenbank kann jederzeit ersetzt werden, während der Geschäftscode nicht geändert werden muss - die Fabrik übernimmt diese Arbeit. Spring unterstützt die Speicherung aller DAOs sowohl in der Komponentenfabrik als auch in der DAO-Fabrik.
Datenzuordnungsmuster
Das ORM-Framework bietet eine Zuordnung zwischen Objekten und relationalen Datenbanken, da Objekte und Tabellen relationaler Datenbanken Anwendungsdaten auf unterschiedliche Weise speichern. Darüber hinaus verfügen Objekte und Tabellen über verschiedene Mechanismen zur Strukturierung von Daten. Wenn Sie eine ORM-Lösung in einer Spring-Anwendung wie Hibernate, JPA oder JDO verwenden, müssen Sie sich keine Gedanken über den Zuordnungsmechanismus zwischen Objekten und relationalen Datenbanken machen.
Betrachten wir Abb. 8.3 um das Muster „Data Mapper“ besser zu verstehen.
Im Diagramm wird das Account-Objekt über die AccountMapper-Schnittstelle der relationalen Datenbank zugeordnet. AccountMapper spielt die Rolle eines Vermittlers in der Anwendung zwischen dem Java-Objekt und der zugrunde liegenden Datenbank. Betrachten Sie ein anderes Muster, das auf Datenzugriffsebene verwendet wird.
Muster "Domänenmodell"
Ein Domänenmodell ist ein Objekt, das sowohl Daten als auch Verhalten enthält, wobei das Verhalten die Geschäftslogik einer Unternehmensanwendung bestimmt und Daten Informationen über Geschäftsergebnisse darstellen. Das Domänenmodell kombiniert Daten und den Prozess. In einer Unternehmensanwendung befindet sich das Datenmodell unterhalb der Geschäftsebene und definiert die Geschäftslogik, wobei die Ergebnisse des Geschäftsverhaltens zurückgegeben werden. Betrachten Sie zur Verdeutlichung das folgende Diagramm (Abb. 8.4).
Wie Sie im Diagramm sehen können, definiert die Anwendung zwei Domänenmodelle gemäß den Geschäftsanforderungen. Der Geschäftsalgorithmus zum Überweisen von Geld von einem Konto auf ein anderes wird in der TransferService-Klasse beschrieben. Die Klassen TransferService und AccountService beziehen sich auf das Muster "Domänenmodell" in der Unternehmensanwendung.
Proxies für das verzögerte Download-Muster
"Verzögertes Laden" ist ein Entwurfsmuster, das von einigen ORM-Lösungen, z. B. "Ruhezustand", in Unternehmensanwendungen verwendet wird, um die Initialisierung eines Objekts zu verzögern, bis ein anderes Objekt darauf zugreift, dh wenn es benötigt wird. Der Zweck dieses Entwurfsmusters besteht darin, den Speicher in der Anwendung zu optimieren. Das Entwurfsmuster für das verzögerte Laden von Hibernate wird mithilfe eines virtuellen Proxy-Objekts implementiert. Um das verzögerte Laden zu demonstrieren, verwenden wir einen Proxy, der jedoch nicht für das Muster "Deputy" gilt.
Muster der Vorlagenmethode für die Unterstützung des Ruhezustands im Frühjahr
Das Spring-Framework bietet eine Hilfsklasse für den Zugriff auf Daten auf DAO-Ebene, basierend auf dem Entwurfsmuster der GoF-Mustermethode. Die HibernateTemplate-Klasse des Spring-Frameworks unterstützt Datenbankvorgänge wie Speichern, Erstellen, Löschen und Aktualisieren. Diese Klasse stellt sicher, dass für jede Transaktion nur eine Ruhezustandssitzung verwendet wird.
Integration in den Ruhezustand mit Spring
Hibernate ist ein Open-Source-ORM-Persistenz-Framework, das nicht nur eine Zuordnung einfacher Objektbeziehungen zwischen Java-Objekten und Datenbanktabellen bietet, sondern auch viele erweiterte Funktionen zur Verbesserung der Anwendungsleistung bietet und auch zur Verbesserung der Ressourcennutzung wie Caching beiträgt , verzögertes Laden, sofortiges Abrufen von Daten und verteiltes Caching.
Spring bietet vollständige Unterstützung für die Integration in das Hibernate-Framework. Es verfügt über mehrere integrierte Bibliotheken, die es ermöglichen, Hibernate zu 100% zu verwenden. Zum Einrichten der Einstellungen für den Ruhezustand in der Anwendung können Sie das Abhängigkeitsinjektionsmuster und den IoC-Container des Spring-Frameworks verwenden.
Im nächsten Abschnitt erfahren Sie, wie Sie den Ruhezustand im IoC-Container des Spring-Frameworks ordnungsgemäß konfigurieren.
Definieren der Einstellungen für den Ruhezustand von SessionFactory in einem Spring Container
Der beste Ansatz zum Konfigurieren von Hibernate und anderen Speichertechnologien in einer Unternehmensanwendung besteht darin, Geschäftsobjekte mit fest verdrahteten Ressourcenverzeichnissen wie DataSource in JDBC oder SessionFactory in Hibernate zu trennen. Diese Ressourcen können als Komponenten im Spring-Container beschrieben werden. Für den Zugriff von Geschäftsobjekten auf sie sind jedoch Verweise auf sie erforderlich. Betrachten Sie die folgende DAO-Klasse, die ein SessionFactory-Objekt zum Abrufen von Daten für eine Anwendung verwendet:
public class AccountDaoImpl implements AccountDao { private SessionFactory sessionFactory; public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } // ... }
Wie Sie sehen können, folgt die DAO-Klasse AccountDaoImpl dem Abhängigkeitsinjektionsmuster. Um auf die Daten zuzugreifen, ist das SessionFactory-Objekt des Hibernate-Frameworks darin eingebettet und fühlt sich im IoC Spring-Container großartig an. Das SessionFactory-Objekt des Hibernate-Frameworks ist ein einzelnes Objekt und generiert das Hauptobjekt der Hibernate-Schnittstelle org.hibernate.Session. Das SessionFactory-Objekt verwaltet das Session-Objekt und ist auch für das Öffnen und Schließen verantwortlich. Die Sitzungsschnittstelle enthält echte Datenzugriffsfunktionen - Speichern (Speichern), Aktualisieren (Aktualisieren), Löschen (Löschen) und Laden (Laden) von Objekten aus der Datenbank. In der Anwendung führt ein Objekt der AccountDaoImpl-Klasse oder eines anderen Repositorys alle erforderlichen Datenspeicherungsvorgänge mit diesem Sitzungsobjekt aus.
Das Spring-Framework bietet integrierte Hibernate-Module, sodass Sie SessionFactory Hibernate-Komponenten in Ihren Anwendungen verwenden können.
Die org.springframework.orm.hibernate5.LocalSessionFactoryBean-Komponente ist eine Implementierung der FactoryBean-Schnittstelle des Spring-Frameworks. LocalSessionFactoryBean basiert auf dem Abstract Factory-Muster und generiert ein SessionFactory-Objekt in der Anwendung. Dieses Objekt kann im Kontext einer Spring-Anwendung wie folgt als Komponente konfiguriert werden:
@Bean public LocalSessionFactoryBean sessionFactory(DataSource dataSource) { LocalSessionFactoryBean sfb = new LocalSessionFactoryBean(); sfb.setDataSource(dataSource); sfb.setPackagesToScan(new String[] { "com.packt.patterninspring.chapter8.bankapp.model" }); Properties props = new Properties(); props.setProperty("dialect", "org.hibernate.dialect.H2Dialect"); sfb.setHibernateProperties(props); return sfb; }
In diesem Code haben wir das SessionFactory-Objekt als Komponente mithilfe der LocalSessionFactoryBean-Klasse des Spring-Frameworks konfiguriert. Die Methode dieser Komponente akzeptiert ein Objekt vom Typ DataSource als Argument, das den Speicherort und die Methode zum Herstellen einer Verbindung mit der Datenbank bestimmt. Wir haben auch angegeben, welches Paket angezeigt werden soll, indem wir den Wert "com.packt.patterninspring.chapter8.bankapp.model" für die setPackagesToScan-Eigenschaft der LocalSessionFactoryBean-Komponente festgelegt und die dialect-Eigenschaft der SessionFactory-Komponente mithilfe der setHibernateProperties-Methode festgelegt haben, um anzugeben, mit welchem Datenbanktyp wir arbeiten Angelegenheit in der Anwendung.
Nachdem Sie die SessionFactory Hibernate-Komponente eingerichtet haben, sehen wir uns im Kontext der Spring-Anwendung an, wie wir Datenzugriffsobjekte für die Speicherebene unserer Anwendung implementieren können.
Über den Autor
Dinesh Rajput ist Chefredakteur der Dineshonjava-Website, einem technischen Blog, der sich den Java- und Spring-Technologien widmet. Die Site enthält Artikel zur Java-Technologie. Dinesh ist Blogger und Autor von Büchern. Seit 2008 ist er Spring-Enthusiast und zertifizierter Spezialist bei Pivotal (Pivotal Certified Spring Professional). Er verfügt über mehr als ein Jahrzehnt Erfahrung in Design und Entwicklung mit Java und Spring. Er ist spezialisiert auf die Arbeit mit der neuesten Version von Spring Framework, Spring Boot, Spring Security, die Erstellung einer REST-API, Microservice-Architektur, reaktive Programmierung, aspektorientierte Programmierung mit Spring, Entwurfsmuster, Struts, Hibernate, Webdienste, Spring Batch, Cassandra, MongoDB, eine Webanwendungsarchitektur.
Derzeit arbeitet Dinesh als Technologiemanager in einem der führenden Unternehmen auf dem Gebiet der Softwareentwicklung. Er war Entwickler und Teamleiter bei Bennett, Coleman & Co. Ltd und davor ein führender Entwickler bei Paytm. Dinesh ist begeistert von den neuesten Java-Technologien und schreibt gerne in technischen Blogs darüber. Er ist aktives Mitglied der Java- und Spring-Community in verschiedenen Foren. Dinesh ist einer der besten Spezialisten für Java und Spring.
Über Reviewer
Rajiv Kumar Mohan verfügt über umfangreiche Erfahrung in der Softwareentwicklung und Unternehmensschulung. Seit 18 Jahren arbeitet er für große IT-Unternehmen wie IBM, Pentasoft, Sapient und Deft Infosystems. Er begann seine Karriere als Programmierer, leitete viele Projekte.
Er ist Experte im Fachbereich Java, J2EE und verwandte Frameworks, Android, UI-Technologien. Zertifiziert von Sun als Java-Programmierer (SCJP, Sun Certified Java Programmer) und Java-Webentwickler (Sun Certified Web Component Developer, SCWCD). Rajiv hat vier Hochschulausbildungen: in den Bereichen Informatik (Informatik), Angewandte Informatik (Computeranwendungen), Organische Chemie und Betriebswirtschaft (MBA). Er ist Personalberater und Trainingsexperte bei HCL, Amdocs, Steria, TCS, Wipro, der Oracle University, IBM, CSC, Genpact, Sapient Infosys und Capgemini.
Rajeev ist der Gründer von SNS Infotech, einem Unternehmen in der Stadt Greater Noida. Darüber hinaus arbeitete er am National Institute of Fashion Technology (NIFT).
»Weitere Informationen zum Buch finden Sie auf
der Website des Herausgebers»
Inhalt»
Auszug20% Rabatt auf Gutschein für Straßenhändler -
Frühling