
Salut, habrozhiteli! Nous avons publié un livre qui donne un aperçu du cadre et des modèles de conception de Spring 5. Le principe de l'injection de dépendances est expliqué, qui joue un rôle clé dans la création de code faiblement couplé dans le framework Spring. Ensuite, les modèles classiques de Gang of Four sont examinés lors de la conception d'applications au printemps. Dans les parties suivantes du livre, l'auteur discute des modèles de programmation orientée aspect (AOP), des modèles JDBC qui vous permettent d'abstraire l'accès à la base de données. Dans les derniers chapitres du livre, l'auteur explore l'utilisation de MVC, les modèles de conception réactifs et les modèles de conception utilisés dans la programmation simultanée et parallèle de Spring.
Nous vous suggérons de vous familiariser avec le passage «Modèle« Objet d'accès aux données »»
L'objet d'accès aux données (DAO) est un modèle de conception extrêmement populaire pour le niveau de persistance dans les applications J2EE. Il sépare le niveau de logique métier du niveau de rétention. Le modèle DAO est basé sur des principes orientés objet d'encapsulation et d'abstraction. Le contexte d'utilisation du modèle DAO est l'accès aux données et à leur stockage en fonction de l'implémentation spécifique et du type de stockage, par exemple, une base de données orientée objet, des fichiers non structurés, des bases de données relationnelles, etc. En fonction du modèle DAO, vous pouvez créer une interface DAO et l'implémenter, pour résumer et encapsuler tous les appels à la source de données. Une implémentation DAO similaire gère les ressources de base de données telles que les connexions à une source de données.
Les interfaces DAO sont très faciles à adapter à tous les mécanismes sous-jacents des sources de données, elles n'ont pas besoin d'être remplacées par des changements dans les technologies de stockage à des niveaux inférieurs. Ce modèle vous permet de mettre en œuvre diverses technologies d'accès aux données sans affecter la logique métier de l'application d'entreprise. Prenons la fig. 8.1 pour mieux comprendre les principes du modèle DAO.
Comme vous pouvez le voir dans le diagramme, les objets suivants sont impliqués dans le motif.
BusinessObject - un objet qui fonctionne au niveau de l'entreprise - un client pour le niveau d'accès aux données. Il a besoin de données pour modéliser les processus métier, ainsi que pour préparer des objets Java pour des fonctions auxiliaires ou des contrôleurs d'application.
DataAccessObject est l'objet principal du modèle DAO. Masque à BusinessObject l'intégralité de l'implémentation de bas niveau de la base de données sous-jacente.
DataSource est également un objet qui contient toutes les informations de bas niveau sur ce qu'est exactement la base de données sous-jacente: RDBMS, fichiers non structurés ou XML.
TransferObject - un objet utilisé comme support de stockage. Utilisé par le DataAccessObject pour renvoyer des données au BusinessObject.
Prenons l'exemple suivant d'un modèle DAO dans lequel AccountDao est l'interface d'un DataAccessObject et AccountDaoImpl est une classe qui implémente l'interface AccountDao:
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); } }
Création d'objets DAO au printemps à l'aide du modèle de conception Factory
Comme vous le savez, de nombreux modèles de conception sont impliqués dans le framework Spring. Le modèle Factory est un modèle de conception générique et est utilisé pour créer un objet sans révéler la logique sous-jacente au client, ainsi que pour affecter un nouvel objet à l'appelant à l'aide d'une interface commune ou d'une classe abstraite. Grâce aux modèles de conception Factory Method et Abstract Factory, une très grande flexibilité du modèle DAO peut être obtenue.
Nous découvrirons où, dans notre exemple, nous mettons en œuvre la stratégie dans laquelle l'usine produit des objets DAO pour la mise en œuvre d'une base de données commune (Fig. 8.2).
Vous pouvez voir dans le diagramme précédent que AccountDaoFactory produit un objet AccountDao, c'est-à-dire qu'il est une usine pour lui. La base de données sous-jacente peut être remplacée à tout moment, tandis que le code d'entreprise n'a pas besoin d'être changé - l'usine prend en charge ce travail. Spring prend en charge le stockage de tous les DAO dans la fabrique de composants ainsi que dans la fabrique DAO.
Modèle de mappage de données
Le cadre ORM fournit un mappage entre les objets et les bases de données relationnelles, car les objets et les tables des bases de données relationnelles stockent les données d'application de différentes manières. De plus, les objets et les tables ont différents mécanismes pour structurer les données. Lorsque vous utilisez une solution ORM dans une application Spring, telle que Hibernate, JPA ou JDO, il n'est pas nécessaire de se soucier du mécanisme de mappage entre les objets et les bases de données relationnelles.
Prenons la fig. 8.3 pour mieux comprendre le modèle «Data Mapper».
Dans le diagramme, l'objet Account est mappé à la base de données relationnelle à l'aide de l'interface AccountMapper. AccountMapper joue le rôle d'intermédiaire dans l'application entre l'objet Java et la base de données sous-jacente. Prenons un autre modèle utilisé au niveau de l'accès aux données.
Modèle "Modèle de domaine"
Un modèle de domaine est un objet qui possède à la fois des données et un comportement, où le comportement détermine la logique métier d'une application d'entreprise et où les données représentent des informations sur les résultats métier. Le modèle de domaine combine les données et le processus. Dans une application d'entreprise, le modèle de données est situé sous le niveau métier et définit la logique métier, renvoyant les résultats du comportement métier. Considérez le diagramme suivant pour plus de clarté (Fig. 8.4).
Comme vous pouvez le voir dans le diagramme, l'application définit deux modèles de domaine conformément aux exigences de l'entreprise. L'algorithme métier pour transférer de l'argent d'un compte à un autre est décrit dans la classe TransferService. Les classes TransferService et AccountService se rapportent au modèle "Domain Model" dans l'application d'entreprise.
Proxys pour le modèle de téléchargement différé
Le «chargement différé» est un modèle de conception utilisé par certaines des solutions ORM, par exemple Hibernate, dans les applications d'entreprise pour retarder l'initialisation d'un objet jusqu'à ce qu'un autre objet y accède, c'est-à-dire lorsqu'il est nécessaire. Le but de ce modèle de conception est d'optimiser la mémoire dans l'application. Le modèle de conception de chargement différé d'Hibernate est implémenté à l'aide d'un objet proxy virtuel. Pour démontrer un chargement retardé, nous utilisons un proxy, mais il ne s'applique pas au modèle "Deputy".
Modèle de modèle de méthode pour la prise en charge de la mise en veille prolongée au printemps
Le framework Spring fournit une classe d'assistance pour accéder aux données au niveau DAO, basée sur le modèle de conception GoF Pattern Method. La classe HibernateTemplate du framework Spring prend en charge les opérations de base de données telles que l'enregistrement, la création, la suppression et la mise à jour. Cette classe garantit qu'une seule session Hibernate est utilisée pour chaque transaction.
Intégration Hibernate avec Spring
Hibernate est un framework de persistance ORM open source qui fournit non seulement un mappage de relations d'objets simples entre les objets Java et les tables de base de données, mais offre également de nombreuses fonctionnalités avancées pour améliorer les performances des applications, et contribue également à améliorer l'utilisation des ressources, telles que la mise en cache , chargement retardé, récupération immédiate des données et mise en cache distribuée.
Spring fournit un support complet pour l'intégration avec le framework Hibernate, il dispose de plusieurs bibliothèques intégrées qui permettent d'utiliser Hibernate à 100%. Pour configurer les paramètres Hibernate dans l'application, vous pouvez utiliser le modèle d'injection de dépendance et le conteneur IoC du framework Spring.
Dans la section suivante, nous découvrirons comment configurer correctement Hibernate dans le conteneur IoC du framework Spring.
Définition des paramètres d'objet Hibernate SessionFactory dans un conteneur Spring
La meilleure approche pour configurer Hibernate et d'autres technologies de stockage dans n'importe quelle application d'entreprise consiste à séparer les objets métier avec des répertoires de ressources câblés, tels que DataSource dans JDBC ou SessionFactory dans Hibernate. Ces ressources peuvent être décrites comme des composants du conteneur Spring. Mais leur accès par des objets métier nécessite des références à eux. Considérez la classe DAO suivante qui utilise un objet SessionFactory pour récupérer des données pour une application:
public class AccountDaoImpl implements AccountDao { private SessionFactory sessionFactory; public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } // ... }
Comme vous pouvez le voir, la classe DAO, AccountDaoImpl, suit le modèle d'injection de dépendance. Pour accéder aux données, l'objet SessionFactory du framework Hibernate y est incorporé, et il se sent bien dans le conteneur IoC Spring. L'objet SessionFactory du framework Hibernate est un objet unique; il génère l'objet principal de l'interface Hibernate org.hibernate.Session. L'objet SessionFactory gère l'objet Session et est également responsable de son ouverture et de sa fermeture. L'interface de session contient une véritable fonctionnalité d'accès aux données - enregistrer (enregistrer), mettre à jour (mettre à jour), supprimer (supprimer) et charger (charger) des objets de la base de données. Dans l'application, un objet de la classe AccountDaoImpl ou tout autre référentiel effectue toutes les opérations de stockage de données nécessaires à l'aide de cet objet Session.
Le framework Spring fournit des modules intégrés Hibernate, vous pouvez donc utiliser les composants SessionFactory Hibernate dans vos applications.
Le composant org.springframework.orm.hibernate5.LocalSessionFactoryBean est une implémentation de l'interface Spring FactoryBean. LocalSessionFactoryBean est basé sur le modèle Abstract Factory; il génère un objet SessionFactory dans l'application. Cet objet peut être configuré en tant que composant dans le contexte d'une application Spring comme suit:
@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; }
Dans ce code, nous avons configuré l'objet SessionFactory en tant que composant à l'aide de la classe LocalSessionFactoryBean du framework Spring. La méthode de ce composant accepte un objet de type DataSource comme argument, qui détermine l'emplacement et la méthode de connexion à la base de données. Nous avons également spécifié le package à afficher en définissant la valeur «com.packt.patterninspring.chapter8.bankapp.model» pour la propriété setPackagesToScan du composant LocalSessionFactoryBean, et définissez la propriété dialecte du composant SessionFactory à l'aide de la méthode setHibernateProperties pour indiquer le type de base de données que nous avons avec matière dans la demande.
Maintenant, après avoir configuré le composant SessionFactory Hibernate, dans le contexte de l'application Spring, voyons comment nous pouvons implémenter des objets d'accès aux données pour le niveau de sauvegarde de notre application.
À propos de l'auteur
Dinesh Rajput est rédacteur en chef du site Web Dineshonjava, un blog technique dédié aux technologies Java et Spring. Le site contient des articles sur la technologie Java. Dinesh est un blogueur, auteur de livres, depuis 2008 un passionné de printemps, un spécialiste certifié chez Pivotal (Pivotal Certified Spring Professional). Il a plus d'une décennie d'expérience en conception et développement en utilisant Java et Spring. Il est spécialisé dans l'utilisation de la dernière version de Spring Framework, Spring Boot, Spring Security, la création d'une API REST, l'architecture de microservices, la programmation réactive, la programmation orientée aspect utilisant Spring, les modèles de conception, Struts, Hibernate, les services Web, Spring Batch, Cassandra, MongoDB, une architecture d'application web.
Actuellement, Dinesh travaille en tant que directeur technologique dans l'une des principales entreprises dans le domaine du développement de logiciels. Il était développeur et chef d'équipe chez Bennett, Coleman & Co. Ltd, et avant cela, un développeur leader chez Paytm. Dinesh est passionné par les dernières technologies Java et aime écrire à leur sujet dans des blogs techniques. Il est un membre actif des communautés Java et Spring dans divers forums. Dinesh est l'un des meilleurs spécialistes de Java et Spring.
À propos de Reviewer
Rajiv Kumar Mohan possède une vaste expérience dans le développement de logiciels et la formation en entreprise. Depuis 18 ans, il a travaillé pour de grandes sociétés informatiques telles qu'IBM, Pentasoft, Sapient et Deft Infosystems. Il a commencé sa carrière en tant que programmeur, a dirigé de nombreux projets.
Il est expert dans le domaine de Java, J2EE et des frameworks associés, Android, UI-technologies. Certifié par Sun en tant que programmeur Java (SCJP, Sun Certified Java Programmer) et Java Web Developer (Sun Certified Web Component Developer, SCWCD). Rajiv possède quatre formations supérieures: dans le domaine de l'informatique (informatique), de l'informatique appliquée (applications informatiques), de la chimie organique et de l'administration des affaires (MBA). Il est consultant en recrutement et expert en formation chez HCL, Amdocs, Steria, TCS, Wipro, Oracle University, IBM, CSC, Genpact, Sapient Infosys et Capgemini.
Rajeev est le fondateur de SNS Infotech, une entreprise située dans la ville de Greater Noida. En outre, il a travaillé à l'Institut national des technologies de la mode (NIFT).
»Plus d'informations sur le livre sont disponibles sur
le site Web de l'éditeur»
Contenu»
ExtraitCoupon de 20% pour les colporteurs -
Printemps