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>Apprentissage recommandé :
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()); } }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"/>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()); }
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 : Targetpublic interface AdvisorAdapter { boolean supportsAdvice(Advice advice); MethodInterceptor getInterceptor(Advisor advisor); }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); } }
Mode Wrapper
Recommandé : 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 :
9.
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 JdbcTemplateJdbcTemplate exécute la méthode d'exécutionCe 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!