Heim >Java >javaLernprogramm >Welche Designmuster verwendet Spring?
Welche Designmuster werden von Spring verwendet?
Einfaches Fabrikmuster
wird auch als Static Factory Method-Muster bezeichnet, ist jedoch nicht eines der 23 GOF-Entwurfsmuster.
Der Kern des einfachen Factory-Musters besteht darin, dass eine Factory-Klasse anhand der eingehenden Parameter dynamisch bestimmt, welche Produktklasse erstellt werden soll.
Die BeanFactory im Frühling ist die Verkörperung des einfachen Factory-Musters. Das Bean-Objekt wird durch Übergabe einer eindeutigen Kennung erhalten. Ob es jedoch nach der Übergabe der Parameter oder vor der Übergabe der Parameter erstellt wird, hängt davon ab Spezifische Situation. Die folgende Konfiguration erstellt eine itxxzBean in der HelloItxxz-Klasse.
<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>
Empfohlene Lerninhalte: Was ist Frühling?
2. Factory-Methodenmuster
Normalerweise verwendet die Anwendung direkt neue Objekte, um die Erstellung und Verwendung von Objekten zu trennen Es wird ein Muster verwendet, das heißt, die Anwendung übergibt die Verantwortung für die Erstellung und Initialisierung von Objekten an das Factory-Objekt.
Im Allgemeinen verfügt eine Anwendung über ein eigenes Factory-Objekt zum Erstellen von Beans. Wenn das eigene Factory-Objekt der Anwendung zur Verwaltung an Spring übergeben wird, verwaltet Spring keine gewöhnlichen Beans, sondern Factory-Beans.
Nehmen wir als Beispiel die statische Methode in der Factory-Methode:
import java.util.Random; public class StaticFactoryBean { public static Integer createRandom() { return new Integer(new Random().nextInt()); } }
Erstellen Sie eine config.xm-Konfigurationsdatei und fügen Sie sie zur Verwaltung in den Spring-Container ein. Sie müssen die statische Methode angeben durch Factory-Methode Name:
<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. Der Singleton-Modus
stellt sicher, dass eine Klasse nur eine Instanz hat und eine globale bereitstellt Zugriff auf den Zugangspunkt. Der Singleton-Modus im Frühjahr vervollständigt die zweite Hälfte des Satzes, dh er stellt den globalen Zugriffspunkt BeanFactory bereit. Es gibt jedoch keine Singleton-Steuerung auf Konstruktorebene, da Spring beliebige Java-Objekte verwaltet.
Kerntipp: Die Standard-Beans unter Spring sind alle Singletons, die durch singleton="true|false" oder Scope="?" angegeben werden können.
4. Adaptermuster
In Spring's Aop wird Advice (Benachrichtigung) verwendet, um die Funktionalität der Proxy-Klasse zu verbessern. Das Prinzip der Spring-Implementierung dieser AOP-Funktion besteht darin, den Proxy-Modus (1. Dynamischer JDK-Proxy, 2. CGLib-Bytecode-Generierungstechnologie-Proxy) zu verwenden, um die Aspekte der Klasse auf Methodenebene zu verbessern, dh die Proxy-Klasse von zu generieren die Proxy-Klasse und setzen Sie einen Interceptor vor der Methode der Proxy-Klasse und verbessern Sie die Funktion der Proxy-Methode, indem Sie den wichtigen Inhalt des Interceptors ausführen und so eine aspektorientierte Programmierung realisieren.
Adapter-Klassenschnittstelle: Target
public interface AdvisorAdapter { boolean supportsAdvice(Advice advice); MethodInterceptor getInterceptor(Advisor advisor); }
MethodBeforeAdviceAdapter-Klasse,
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); } }
5. Wrapper-Modus
Empfohlen: spring Chinese Manual
Wir sind in unserem Projekt auf ein solches Problem gestoßen: Unser Projekt muss eine Verbindung zu mehreren Datenbanken herstellen, und verschiedene Kunden greifen bei jedem Besuch auf unterschiedliche Datenbanken zu. In der Vergangenheit haben wir in den Frameworks Spring und Hibernate immer eine Datenquelle konfiguriert, sodass das dataSource-Attribut von sessionFactory immer auf diese Datenquelle verwies und bei Verwendung von sessionFactory unverändert blieb.
Aber aufgrund der Anforderungen des Projekts muss unser DAO beim Zugriff auf die SessionFactory ständig zwischen mehreren Datenquellen wechseln. Es stellt sich die Frage: Wie kann die SessionFactory die Datenpersistenz entsprechend den Anforderungen des Kunden dynamisch durchführen? je nach Bedarf zwischen verschiedenen Datenquellen wechseln? Können wir es mit ein paar Modifikationen unter dem Spring Framework lösen? Gibt es Designmuster, die verwendet werden können?
Denken Sie zunächst daran, alle Datenquellen im applicationContext von Spring zu konfigurieren. Diese Datenquellen können unterschiedlicher Art sein, beispielsweise verschiedene Datenbanken: Oracle, SQL Server, MySQL usw., oder sie können unterschiedliche Datenquellen sein, beispielsweise org.apache.commons.dbcp.BasicDataSource, bereitgestellt von Apache, oder org bereitgestellt von spring. springframework.jndi.JndiObjectFactoryBean usw. Anschließend legt sessionFactory das dataSource-Attribut je nach Kundenanforderung auf eine andere Datenquelle fest, um den Zweck des Datenquellenwechsels zu erreichen.
Das im Frühjahr verwendete Wrapper-Muster hat zwei Erscheinungsformen im Klassennamen: Zum einen enthält der Klassenname Wrapper und zum anderen enthält der Klassenname Decorator. Im Grunde fügen sie einem Objekt dynamisch einige zusätzliche Verantwortlichkeiten hinzu.
6. Proxy-Muster
Stellen Sie einen Proxy für andere Objekte bereit, um den Zugriff auf dieses Objekt zu steuern. Strukturell ähnelt es dem Decorator-Muster, aber Proxy bedeutet Kontrolle, eher eine Einschränkung von Funktionen, während Decorator die Verantwortlichkeiten erhöhen soll. Der Proxy-Modus von Spring spiegelt sich in AOP wider, z. B. JdkDynamicAopProxy und Cglib2AopProxy.
7. Beobachtermuster
definiert eine Eins-zu-Viele-Abhängigkeitsbeziehung zwischen Objekten. Wenn sich der Zustand eines Objekts ändert, werden alle davon abhängigen Objekte geändert automatisch benachrichtigt und aktualisiert. Der im Frühjahr am häufigsten verwendete Ort für das Observer-Muster ist die Implementierung des Listeners. Wie zum Beispiel ApplicationListener.
8. Strategiemodus
Definieren Sie eine Reihe von Algorithmen, kapseln Sie sie einzeln und machen Sie sie austauschbar. Dieses Muster ermöglicht es dem Algorithmus, sich unabhängig vom Client zu ändern, der ihn verwendet. Der Strategiemodus wird beim Instanziieren von Objekten im Frühjahr verwendet. Der folgende Code in SimpleInstantiationStrategy veranschaulicht die Verwendung des Strategiemodus:
9
Java-Video-Tutorial)
Definieren Sie eine Methode zum Bearbeiten von Variablen in JdbcTemplate in diesem Rückrufobjekt. Um diese Methode zu implementieren, müssen Sie nur die Änderungen vornehmen hier konzentriert. Dann übergeben wir dieses Rückrufobjekt an JdbcTemplate, um den Aufruf abzuschließen. Dies kann eine weitere Möglichkeit sein, die Vorlagenmethode ohne Vererbung zu implementieren. Das Folgende ist ein konkretes Beispiel: Methode ausführen in JdbcTemplateJdbcTemplate führt die Ausführungsmethode ausDas obige ist der detaillierte Inhalt vonWelche Designmuster verwendet Spring?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!