Modèles de conception utilisés dans le framework Spring

Bonjour, citoyens Habrovsk! Le long week-end est terminé, ce qui signifie qu'il est temps de partager une nouvelle traduction utile. Aujourd'hui, nous allons parler des modèles de conception utilisés dans Spring Framework. Comme vous l'avez peut-être deviné, ce matériel est dédié au démarrage du recrutement d'un nouveau groupe sur le cours "Developer for Spring Framework" , qui débute le 28 mai. Commençons.



Dans cet article, nous passerons en revue plusieurs modèles de conception largement utilisés dans Spring Framework. Les modèles de conception décrivent les techniques de programmation dans le développement de logiciels orientés objet.


Voici quelques modèles bien connus utilisés dans Spring Framework:


  • Mandataire (adjoint)
  • Singleton
  • Usine
  • Gabarit
  • Contrôleur de vue du modèle
  • Contrôleur avant
  • Voir l'aide
  • Injection de dépendance et inversion de contrôle (IoC) (Injection de dépendance et inversion de contrôle)
  • Localisateur de services
  • Observateur-observable
  • Objet contextuel

Mandataire (adjoint)


Le modèle de proxy est largement utilisé dans AOP et à distance .


Org.springframework.aop.framework.ProxyFactoryBean est un bon exemple d'utilisation de Proxy.


Cette usine crée des proxys AOP basés sur le bean Spring.


Un proxy fournit un substitut à un autre objet pour contrôler l'accès à celui-ci.


En savoir plus sur Proxy ici .


Singleton


Le modèle Singleton garantit qu'une seule instance d'un objet existe en mémoire qui fournira des services.


Dans Spring, la portée du bean (portée) est singleton par défaut et le conteneur IoC crée exactement une instance de l'objet sur le conteneur Spring IoC.


Le conteneur Spring stockera cette instance unique dans le cache de bac singleton, et toutes les demandes et tous les liens suivants pour ce bac recevront l'objet mis en cache.


Il est recommandé d'utiliser la portée singleton pour les beans sans état.


La portée du bean peut être définie comme singleton ou comme prototype (une nouvelle instance est créée avec chaque requête de bean).


Exemple de configuration dans un fichier xml:


 <!--      singleton --> <bean id = "..." class = "..." scope = "singleton/prototype"> <!--    --> </bean> 

Vous pouvez en savoir plus sur Singleton ici .


Usine


Ce modèle vous permet d'initialiser un objet via une méthode statique publique appelée méthode d'usine.


Spring utilise le modèle Factory pour créer un objet bean en utilisant les deux approches suivantes.


  • Beanfactory


    Un conteneur simple qui fournit un support de base pour DI (injection de dépendance, injection de dépendance). L'interface org.springframework.beans.factory.BeanFactory est utilisée pour travailler avec ce conteneur.


  • ApplicationContext



Un autre conteneur présent dans Spring qui ajoute des fonctionnalités spécifiques à l'entreprise. Ces fonctionnalités incluent la possibilité de lire les paramètres des fichiers de propriétés et de publier les événements d'application pour les écouteurs d'événements.


L'interface org.springframework.context.ApplicationContext est utilisée pour travailler avec ce conteneur.


Voici les implémentations les plus couramment utilisées d' ApplicationContext .


  • FileSystemXmlApplicationContext - dans le constructeur, vous devez spécifier le chemin d'accès complet au fichier XML avec la configuration des beans.


  • ClassPathXmlApplicationContext - vous devez placer le fichier XML avec la configuration du bean dans CLASSPATH.


  • XmlWebApplicationContext - Charge un fichier XML avec des métadonnées XmlWebApplicationContext dans une application Web.



Exemples:


 package com.eduonix.springframework.applicationcontext; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; public class App { public static void main(String[] args) { ApplicationContext context = new FileSystemXmlApplicationContext( "C:/work/IOC Containers/springframework.applicationcontext/src/main/resources/bean-factory-config.xml"); HelloApplicationContext obj = (HelloApplicationContext) context.getBean("helloApplicationContext"); obj.getMsg(); } } 

Pour mieux comprendre cela, regardons un exemple du monde réel. Première configuration:


 <bean id="welcomerBean" class="com.mysite.Welcomer" factory-method="createWelcomer"> <constructor-arg ref="messagesLocator"></constructor-arg> </bean> <bean id="messagesLocator" class="com.mysite.MessageLocator"> <property name="messages" value="messages_file.properties"></property> </bean> 

Et maintenant le haricot:


 public class Welcomer { private String message; public Welcomer(String message) { this.message = message; } public static Welcomer createWelcomer(MessageLocator messagesLocator) { Calendar cal = Calendar.getInstance(); String msgKey = "welcome.pm"; if (cal.get(Calendar.AM_PM) == Calendar.AM) { msgKey = "welcome.am"; } return new Welcomer(messagesLocator.getMessageByKey(msgKey)); } } 

Vous pouvez en savoir plus sur Factory ici .


Gabarit


Ce modèle est largement utilisé pour travailler avec du code passe-partout répété (comme la fermeture des connexions, etc.).
Par exemple, JdbcTemplate , JmsTemplate , JpaTemplate ( Note du traducteur: JpaTemplate est obsolète depuis Spring 3.1 ).


Vous pouvez en savoir plus sur le modèle ici .


Contrôleur de vue du modèle


L'avantage de Spring MVC est que vos contrôleurs sont des POJO, pas des servlets. Cela facilite le test des contrôleurs. Il convient de noter que les contrôleurs sont uniquement tenus de renvoyer le nom logique de la vue, et le choix de la vue est laissé au ViewResolver . Cela facilite la réutilisation des contrôleurs pour diverses options de présentation.


Vous pouvez en savoir plus sur Model View Controller ici .


Contrôleur avant


Spring fournit un DispatcherServlet pour garantir qu'une demande entrante est envoyée à vos contrôleurs.


Le modèle Front Controller est utilisé pour fournir un mécanisme de traitement des demandes centralisé, afin que toutes les demandes soient traitées par un seul gestionnaire. Ce gestionnaire peut authentifier, autoriser, enregistrer ou suivre la demande, puis transmettre la demande au contrôleur approprié.


Vous pouvez en savoir plus sur le contrôleur frontal ici .


Voir l'aide


Spring propose plusieurs balises et macros Velocity JSP personnalisées pour séparer le code de la présentation.


View Helper sépare le contenu statique d'une vue, telle qu'un JSP, du traitement de la logique métier.


Des cadres tels que Spring et Struts fournissent leurs propres bibliothèques de balises pour encapsuler la logique de traitement dans les assistants au lieu de placer la logique dans une vue telle que les fichiers JSP.


Vous pouvez en savoir plus sur View Helper ici .


Injection de dépendance et inversion de contrôle (IOC) (Injection de dépendance et inversion de contrôle)


Le conteneur IoC de Spring est responsable de la création de l'objet, de la liaison des objets entre eux, de la configuration des objets et de la gestion de l'ensemble de leur cycle de vie, de la création à la destruction complète.


Le conteneur Spring utilise l'injection de dépendance (DI) pour contrôler les composants de l'application. Ces composants sont appelés Spring Beans.


Vous pouvez en savoir plus sur l'injection de dépendance ici .


Localisateur de services


ServiceLocatorFactoryBean stocke des informations sur tous les beans dans un contexte. Lorsque le code client demande un service (bean) par nom, il trouve simplement ce composant dans son contexte et le renvoie. Le code client n'a pas besoin d'écrire du code lié à Spring pour trouver le bean.


Le modèle Service Locator est utilisé lorsque nous voulons trouver divers services à l'aide de JNDI. Étant donné le coût élevé de la recherche de services dans JNDI, Service Locator utilise la mise en cache. Lorsqu'un service est demandé pour la première fois, le localisateur de service le recherche dans JNDI et met en cache l'objet. Une recherche supplémentaire du même service via Service Locator est effectuée dans le cache, ce qui améliore considérablement les performances de l'application.


Vous pouvez en savoir plus sur Service Locator ici .


Observateur-observable


Utilisé dans le moteur d'événements ApplicationContext .
Définit une relation un-à-plusieurs entre les objets de sorte que lorsque l'état d'un objet change, tous ses abonnés sont informés et mis à jour automatiquement.


Vous pouvez en savoir plus sur Observer ici .


Objet contextuel


Le modèle d'objet de contexte encapsule les données système dans un objet de contexte pour le partage par d'autres parties de l'application sans lier l'application à un protocole spécifique.


ApplicationContext est l'interface centrale d'une application Spring pour fournir des informations de configuration d'application.


Vous pouvez en savoir plus sur l'objet contextuel ici .


Les références


https://stackoverflow.com/questions/755563/what-design-patterns-are-used-in-spring-framework


Voici un tel matériel. Nous attendons vos commentaires et sommes invités à un webinaire gratuit , dans le cadre duquel nous développerons une application Web classique à part entière avec interface utilisateur, authentification et autorisation. Nous étudierons également les fonctionnalités des applications Web et tenterons de résoudre certains problèmes d'Entreprise qui. Le webinaire aura lieu aujourd'hui.

Source: https://habr.com/ru/post/fr451516/


All Articles