Maison > Java > javaDidacticiel > Quels sont les modèles de conception utilisés par Spring ?

Quels sont les modèles de conception utilisés par Spring ?

angryTom
Libérer: 2020-02-14 15:06:37
original
3438 Les gens l'ont consulté

Quels sont les modèles de conception utilisés par Spring ?

Quels sont les modèles de conception utilisés par Spring

1. 🎜>

est également appelé modèle Static Factory Method, mais ce n'est pas l'un des 23 modèles de conception GOF.

L'essence du modèle d'usine simple est qu'une classe d'usine détermine dynamiquement quelle classe de produit doit être créée en fonction des paramètres entrants.

La BeanFactory au printemps est l'incarnation du modèle d'usine simple. L'objet bean est obtenu en transmettant un identifiant unique, mais s'il est créé après la transmission des paramètres ou avant la transmission des paramètres, cela dépend de la. situation spécifique. Certainement. La configuration suivante crée un itxxzBean dans la classe HelloItxxz.

<beans>  
    <bean id="singletonBean" class="com.itxxz.HelloItxxz">
         <constructor-arg>
            <value>Hello! 这是singletonBean</value>  
         </constructor-arg>
    </ bean>
    <bean id="itxxzBean" class="com.itxxz.HelloItxxz"  singleton="false">  
         <constructor-arg>     
             <value>Hello! 这是itxxzBean! </value> 
         </constructor-arg> 
    </bean>
</beans>
Copier après la connexion

Apprentissage recommandé :

Qu'est-ce que le printemps ?

2. Modèle de méthode Factory

Habituellement, l'application utilise directement new pour créer de nouveaux objets Afin de séparer la création et l'utilisation d'objets, une usine. est utilisé Modèle, c'est-à-dire que l'application confie les responsabilités de création et d'initialisation des objets à l'objet usine.

Généralement, une application possède son propre objet d'usine pour créer des beans. Si le propre objet d'usine de l'application est confié à Spring pour gestion, alors Spring ne gérera pas les beans ordinaires, mais les beans d'usine.

Prenons comme exemple la méthode statique dans la méthode factory :

import java.util.Random;
public class StaticFactoryBean { 
    public static Integer createRandom() { 
        return new Integer(new Random().nextInt());   
    }
}
Copier après la connexion

Créez un fichier de configuration config.xm et incluez-le dans le conteneur Spring pour la gestion. Vous devez spécifier la méthode statique. via la méthode d'usine. Nom :

<bean id="random"class="example.chapter3.StaticFactoryBean" factory-method="createRandom" scope="prototype"/>
Copier après la connexion

Test :

public static void main(String[] args) {
    //调用getBean()时,返回随机数.如果没有指定factory-method,会返回StaticFactoryBean的实例,即返回工厂Bean的实例  
    XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("config.xml"));    
    System.out.println("我是IT学习者创建的实例:"+factory.getBean("random").toString());
}
Copier après la connexion

3. Le mode Singleton

garantit qu'une classe n'a qu'une seule instance et fournit une instance. accès global à son point d'accès. Le mode singleton au printemps complète la seconde moitié de la phrase, c'est-à-dire qu'il fournit le point d'accès global BeanFactory. Mais il n'y a pas de contrôle singleton au niveau du constructeur, car Spring gère des objets Java arbitraires.

Astuce principale : les beans par défaut sous Spring sont tous des singletons, qui peuvent être spécifiés par singleton="true|false" ou scope="?".

4. Modèle d'adaptateur

Dans Spring's Aop, Advice (notification) est utilisé pour améliorer les fonctionnalités de la classe mandatée. Le principe de l'implémentation par Spring de cette fonction AOP est d'utiliser le mode proxy (1. proxy dynamique JDK. 2. proxy technologique de génération de bytecode CGLib.) pour améliorer les aspects de la classe au niveau de la méthode, c'est-à-dire générer la classe proxy de la classe proxy, et définir un intercepteur avant la méthode de la classe proxy, et améliorer la fonction de la méthode proxy en exécutant le contenu important de l'intercepteur, réalisant une programmation orientée aspect.

Interface de la classe Adaptateur : Target

public interface AdvisorAdapter {
    boolean supportsAdvice(Advice advice);  
    MethodInterceptor getInterceptor(Advisor advisor);
}
Copier après la connexion

Classe MethodBeforeAdviceAdapter,


Adapterclass MethodBeforeAdviceAdapter implements AdvisorAdapter, Serializable {  
    public boolean supportsAdvice(Advice advice) {       
        return (advice instanceof MethodBeforeAdvice);  
    }  
    public MethodInterceptor getInterceptor(Advisor advisor) {      
        MethodBeforeAdvice advice = (MethodBeforeAdvice) advisor.getAdvice();  
        return new MethodBeforeAdviceInterceptor(advice); 
    }
}
Copier après la connexion

Mode Wrapper

Recommandé :

Manuel chinois de printemps

Nous avons rencontré un tel problème dans notre projet : notre projet doit se connecter à plusieurs bases de données, et différents clients accéderont à différentes bases de données en fonction de leurs besoins lors de chaque visite de la base de données. Dans le passé, nous configurions toujours une source de données dans les frameworks Spring et Hibernate, de sorte que l'attribut dataSource de sessionFactory pointait toujours vers cette source de données et restait inchangé. Tous les DAO accèdent à la base de données via cette source de données lors de l'utilisation de sessionFactory.

Mais maintenant, en raison des besoins du projet, notre DAO doit constamment basculer entre plusieurs sources de données lors de l'accès à sessionFactory. La question se pose : comment faire en sorte que sessionFactory effectue la persistance des données en fonction des clients Can de manière dynamique. basculer entre différentes sources de données en fonction de leurs besoins ? Pouvons-nous le résoudre avec quelques modifications dans le framework Spring ? Existe-t-il des modèles de conception qui peuvent être utilisés ?

Pensez d'abord à configurer toutes les sources de données dans l'applicationContext de Spring. Ces dataSources peuvent être de différents types, comme différentes bases de données : Oracle, SQL Server, MySQL, etc., ou il peut s'agir de différentes sources de données : comme org.apache.commons.dbcp.BasicDataSource fourni par apache, ou org fourni par springframework.jndi.JndiObjectFactoryBean etc. Ensuite, sessionFactory définit l'attribut dataSource sur une source de données différente en fonction de chaque demande du client pour atteindre l'objectif de changement de source de données.

Le modèle wrapper utilisé au printemps a deux manifestations dans le nom de la classe : l'une est que le nom de la classe contient Wrapper, et l'autre est que le nom de la classe contient Decorator. Fondamentalement, ils ajoutent dynamiquement des responsabilités supplémentaires à un objet.

6. Modèle de proxy

Fournir un proxy pour d'autres objets pour contrôler l'accès à cet objet. Structurellement, il est similaire au modèle Décorateur, mais le Proxy est un contrôle, plutôt une restriction des fonctions, tandis que le Décorateur consiste à augmenter les responsabilités. Le mode Proxy de Spring se reflète dans aop, comme JdkDynamicAopProxy et Cglib2AopProxy.

7. Le modèle d'observateur

définit une relation de dépendance un-à-plusieurs entre les objets Lorsque l'état d'un objet change, tous les objets qui en dépendent sont des objets. notifié et mis à jour automatiquement. L'endroit le plus couramment utilisé pour le modèle Observer au printemps est l'implémentation de l'auditeur. Tel que ApplicationListener.

8. Mode stratégie

Définissez une série d'algorithmes, encapsulez-les un par un et rendez-les interchangeables. Ce modèle permet à l'algorithme de changer indépendamment du client qui l'utilise. Le mode Stratégie est utilisé lors de l'instanciation d'objets au printemps. Le code suivant dans SimpleInstantiationStrategy illustre l'utilisation du mode Stratégie :

Quels sont les modèles de conception utilisés par Spring ?

9.

Définit le squelette d'un algorithme en une seule opération, en reportant certaines étapes aux sous-classes. La méthode modèle permet aux sous-classes de redéfinir certaines étapes spécifiques d’un algorithme sans modifier la structure de l’algorithme.

Le modèle de méthode Template doit généralement être hérité. Ici, je souhaite explorer une autre compréhension de la méthode modèle. Lorsque nous utilisons JdbcTemplate au printemps, nous ne voulons pas hériter de cette classe car cette classe a trop de méthodes, mais nous voulons toujours utiliser la connexion à la base de données stable et publique dont dispose JdbcTemplate. Alors, que devons-nous faire ? Nous pouvons extraire les modifications et les transmettre à la méthode JdbcTemplate en tant que paramètre. Mais ce qui change, c'est un morceau de code, et ce code utilisera des variables dans JdbcTemplate. ce qu'il faut faire? Utilisons ensuite des objets de rappel.

(Partage du didacticiel vidéo associé :

tutoriel vidéo Java)

Définissez une méthode pour manipuler les variables dans JdbcTemplate dans cet objet de rappel Pour implémenter cette méthode, les modifications sont simplement. concentré ici. Ensuite, nous transmettons cet objet de rappel à JdbcTemplate pour terminer l'appel. Cela peut être une autre façon d’implémenter la méthode Template sans héritage.

Ce qui suit est un exemple spécifique : la méthode d'exécution dans JdbcTemplate

JdbcTemplate exécute la méthode d'exécution

Quels sont les modèles de conception utilisés par Spring ?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal