Heim  >  Artikel  >  Java  >  Welche Designmuster verwendet Spring?

Welche Designmuster verwendet Spring?

angryTom
angryTomOriginal
2020-02-14 15:06:373336Durchsuche

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:

Welche Designmuster verwendet Spring?

9

Definiert das Grundgerüst eines Algorithmus in einer Operation und verschiebt einige Schritte auf Unterklassen. Mit der Vorlagenmethode können Unterklassen bestimmte spezifische Schritte eines Algorithmus neu definieren, ohne die Struktur des Algorithmus zu ändern.

Das Muster der Vorlagenmethode muss im Allgemeinen vererbt werden. Hier möchte ich ein anderes Verständnis der Vorlagenmethode untersuchen. Wenn wir JdbcTemplate im Frühjahr verwenden, möchten wir diese Klasse nicht erben, da diese Klasse zu viele Methoden hat, aber wir möchten trotzdem die stabile und öffentliche Datenbankverbindung verwenden, die JdbcTemplate hat. Was sollen wir also tun? Wir können die Änderungen extrahieren und als Parameter an die JdbcTemplate-Methode übergeben. Was sich jedoch ändert, ist ein Teil des Codes, und dieser Code verwendet Variablen in JdbcTemplate. was zu tun? Dann verwenden wir Callback-Objekte.

(Verwandte Video-Tutorial-Freigabe:

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 JdbcTemplate

JdbcTemplate führt die Ausführungsmethode aus

Welche Designmuster verwendet Spring?

Das obige ist der detaillierte Inhalt vonWelche Designmuster verwendet Spring?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:SpringMVC-WorkflowNächster Artikel:SpringMVC-Workflow