Im Spring Framework verwendete Entwurfsmuster

Hallo Habrowsk-Bürger! Das lange Wochenende ist zu Ende, was bedeutet, dass es Zeit ist, eine neue nützliche Übersetzung zu teilen. Heute werden wir über die im Spring Framework verwendeten Entwurfsmuster sprechen. Wie Sie vielleicht erraten haben, ist dieses Material dem Beginn der Rekrutierung einer neuen Gruppe für den Kurs "Entwickler für Spring Framework" gewidmet , der am 28. Mai beginnt. Fangen wir an.



In diesem Artikel werden einige Entwurfsmuster besprochen, die im Spring Framework weit verbreitet sind. Entwurfsmuster beschreiben Programmiertechniken in der objektorientierten Softwareentwicklung.


Hier sind einige bekannte Muster, die im Spring Framework verwendet werden:


  • Stimmrechtsvertreter (Stellvertreter)
  • Singleton
  • Fabrik
  • Vorlage
  • Model View Controller
  • Front Controller
  • Helfer anzeigen
  • Abhängigkeitsinjektion und Inversion der Kontrolle (IoC) (Abhängigkeitsinjektion und Kontrollinversion)
  • Service Locator
  • Beobachter beobachtbar
  • Kontextobjekt

Stimmrechtsvertreter (Stellvertreter)


Das Proxy-Muster wird häufig in AOP und Remoting verwendet .


Ein gutes Beispiel für die Verwendung von Proxy ist org.springframework.aop.framework.ProxyFactoryBean .


Diese Factory erstellt AOP-Proxys basierend auf der Spring Bean.


Ein Proxy bietet einen Ersatz für ein anderes Objekt, um den Zugriff darauf zu steuern.


Lesen Sie hier mehr über Proxy.


Singleton


Das Singleton-Muster stellt sicher, dass nur eine Instanz eines Objekts im Speicher vorhanden ist, das Dienste bereitstellt.


In Spring ist der Bereich der Bean (Bereich) standardmäßig Singleton, und der IoC-Container erstellt genau eine Instanz des Objekts im Spring IoC-Container.


Der Spring-Container speichert diese einzelne Instanz im Singleton-Bin-Cache, und alle nachfolgenden Anforderungen und Links für diesen Bin erhalten das zwischengespeicherte Objekt.


Es wird empfohlen, den Singleton-Bereich für zustandslose Beans zu verwenden.


Der Bereich der Bean kann als singleton oder als prototype (bei jeder Bean-Anforderung wird eine neue Instanz erstellt).


Beispielkonfiguration in einer XML-Datei:


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

Sie können hier mehr über Singleton lesen.


Fabrik


Mit diesem Muster können Sie ein Objekt über eine öffentliche statische Methode initialisieren, die als Factory-Methode bezeichnet wird.


Spring verwendet das Factory-Muster, um ein Bean-Objekt mit den folgenden beiden Ansätzen zu erstellen.


  • Bohnenfabrik


    Ein einfacher Container, der grundlegende Unterstützung für DI bietet (Dependency Injection, Dependency Injection). Die Schnittstelle org.springframework.beans.factory.BeanFactory wird verwendet, um mit diesem Container zu arbeiten.


  • ApplicationContext



Ein weiterer im Frühjahr vorhandener Container, der unternehmensspezifische Funktionen hinzufügt. Zu diesen Funktionen gehört die Möglichkeit, Parameter aus Eigenschaftendateien zu lesen und Anwendungsereignisse für Ereignis-Listener zu veröffentlichen.


Die Schnittstelle org.springframework.context.ApplicationContext wird verwendet, um mit diesem Container zu arbeiten.


Im Folgenden sind die am häufigsten verwendeten Implementierungen von ApplicationContext .


  • FileSystemXmlApplicationContext - Im Konstruktor müssen Sie den vollständigen Pfad zur XML-Datei mit der Konfiguration der Beans angeben.


  • ClassPathXmlApplicationContext - Sie müssen die XML-Datei mit der Bean-Konfiguration in CLASSPATH ablegen.


  • XmlWebApplicationContext - Lädt eine XML-Datei mit XmlWebApplicationContext Metadaten in eine Webanwendung.



Beispiele:


 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(); } } 

Um dies besser zu verstehen, schauen wir uns ein Beispiel aus der Praxis an. Erste Konfiguration:


 <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> 

Und jetzt die Bohne:


 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)); } } 

Weitere Informationen zu Factory finden Sie hier .


Vorlage


Dieses Muster wird häufig verwendet, um mit wiederholtem Boilerplate-Code (z. B. Schließen von Verbindungen usw.) zu arbeiten.
Beispiel: JdbcTemplate , JmsTemplate , JpaTemplate ( Anmerkung des Übersetzers: JpaTemplate ist seit Frühjahr 3.1 veraltet ).


Weitere Informationen zur Vorlage finden Sie hier .


Model View Controller


Der Vorteil von Spring MVC besteht darin, dass Ihre Controller POJOs und keine Servlets sind. Dies erleichtert das Testen von Controllern. Es ist anzumerken, dass die Controller nur den logischen Namen der Ansicht zurückgeben müssen und die Auswahl der Ansicht dem ViewResolver überlassen ViewResolver . Dies erleichtert die Wiederverwendung von Controllern für verschiedene Präsentationsoptionen.


Weitere Informationen zu Model View Controller finden Sie hier .


Front Controller


Spring bietet ein DispatcherServlet, um sicherzustellen, dass eine eingehende Anforderung an Ihre Controller gesendet wird.


Das Front Controller-Muster wird verwendet, um einen zentralen Anforderungsverarbeitungsmechanismus bereitzustellen, sodass alle Anforderungen von einem einzelnen Handler verarbeitet werden. Dieser Handler kann die Anforderung authentifizieren, autorisieren, registrieren oder verfolgen und die Anforderung dann an den entsprechenden Controller weiterleiten.


Weitere Informationen zum Front Controller finden Sie hier .


Helfer anzeigen


Spring verfügt über mehrere benutzerdefinierte Velocity JSP-Tags und -Makros, um Code von Präsentation zu trennen.


View Helper trennt statischen Inhalt in einer Ansicht, z. B. einer JSP, von der Verarbeitung der Geschäftslogik.


Frameworks wie Spring und Struts bieten ihre eigenen Tag-Bibliotheken, um die Verarbeitungslogik in Hilfsprogrammen zu kapseln, anstatt die Logik in einer Ansicht wie JSP-Dateien zu platzieren.


Weitere Informationen zu View Helper finden Sie hier .


Abhängigkeitsinjektion und Inversion der Kontrolle (IOC) (Abhängigkeitsinjektion und Kontrollinversion)


Der IoC-Container von Spring ist dafür verantwortlich, das Objekt zu erstellen, die Objekte miteinander zu verknüpfen, die Objekte zu konfigurieren und ihren gesamten Lebenszyklus von der Erstellung bis zur vollständigen Zerstörung abzuwickeln.


Der Spring-Container verwendet Dependency Injection (DI) zur Steuerung von Anwendungskomponenten. Diese Komponenten werden Spring Beans genannt.


Weitere Informationen zur Abhängigkeitsinjektion finden Sie hier .


Service Locator


ServiceLocatorFactoryBean speichert Informationen zu allen Beans in einem Kontext. Wenn der Clientcode einen Dienst (Bean) nach Namen anfordert, findet er diese Komponente einfach im Kontext und gibt sie zurück. Der Client-Code muss keinen Spring-bezogenen Code schreiben, um die Bean zu finden.


Das Service Locator-Muster wird verwendet, wenn wir verschiedene Services mit JNDI suchen möchten. Angesichts der hohen Kosten für die Suche nach Diensten in JNDI verwendet Service Locator Caching. Wenn ein Dienst zum ersten Mal angefordert wird, sucht der Service Locator in JNDI danach und speichert das Objekt zwischen. Die weitere Suche nach demselben Dienst über Service Locator wird im Cache durchgeführt, wodurch die Anwendungsleistung erheblich verbessert wird.


Weitere Informationen zu Service Locator finden Sie hier .


Beobachter beobachtbar


Wird in der ApplicationContext Ereignis-Engine verwendet.
Definiert eine Eins-zu-Viele-Beziehung zwischen Objekten, sodass alle Abonnenten automatisch benachrichtigt und aktualisiert werden, wenn sich der Status eines Objekts ändert.


Weitere Informationen zu Observer finden Sie hier .


Kontextobjekt


Das Kontextobjektmuster kapselt Systemdaten in einem Kontextobjekt, um sie für andere Teile der Anwendung freizugeben, ohne die Anwendung an ein bestimmtes Protokoll zu binden.


ApplicationContext ist die zentrale Schnittstelle in einer Spring-Anwendung, um Informationen zur Anwendungskonfiguration bereitzustellen.


Weitere Informationen zu Context Object finden Sie hier .


Referenzen


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


Hier ist solches Material. Wir warten auf Ihre Kommentare und werden zu einem kostenlosen Webinar eingeladen, in dessen Rahmen wir eine vollwertige klassische Webanwendung mit Benutzeroberfläche, Authentifizierung und Autorisierung entwickeln werden. Wir werden auch die Funktionen von Webanwendungen untersuchen und versuchen, einige Probleme von Enterprise zu lösen. Das Webinar findet heute statt.

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


All Articles