2009-04-16 7 views
66

Welche Entwurfsmuster werden im Spring-Framework verwendet?Welche Entwurfsmuster werden im Spring-Framework verwendet?

+0

Es enthält mehr als 10 Muster einschließlich ..MVC, Frontcontroller, View Helper, Singleton, Prototyp, Fabrik etc. http://www.javabench.in/2012/02/design-patterns-bein-used-in-spring.html –

+0

Design Patterns - MVC-Muster, Proxy-Muster, Factory-Muster ,, Singleton-Muster, Template-Methode Pattern, FrontController Pattern, View Hilfsmuster, Prototyp PatternDI/IOC Pattern. Referenz-http: //javainuse.com/spring/spring-design-patterns – Gordan

Antwort

51

Es gibt viele unterschiedliche Designmuster verwendet, aber es gibt ein paar offensichtlichen:

  • Proxy - verwendet stark in AOP und remoting.

  • Singleton - im Frühjahr definierte Konfigurationsdateien sind standardmäßig Singletons.

  • Template-Methode - wird häufig verwendet, um wiederholten Code zu verarbeiten (z. B. sauberes Schließen von Verbindungen usw.). Zum Beispiel JdbcTemplate, JmsTemplate, JpaTemplate.


-Update folgende Anmerkungen:

  • Model View Controller :-): Für MVC, Sie könnten die MVC Reference

    einige offensichtliche Muster im Einsatz in MVC lesen möchten. Der Vorteil von Spring MVC ist, dass Ihre Controller POJOs sind und nicht Servlets. Dies erleichtert das Testen von Controllern. Eine Sache zu beachten ist, dass der Controller nur einen logischen View-Namen zurückgeben muss, und die View-Auswahl bleibt auf einem separaten ViewResolver. Dies erleichtert die Wiederverwendung von Controllern für verschiedene Ansichtstechnologien.

  • Front Controller. Spring stellt DispatcherServlet bereit, um sicherzustellen, dass eine eingehende Anforderung an Ihre Controller gesendet wird.

  • View Helper - Spring verfügt über eine Reihe benutzerdefinierter JSP-Tags und Geschwindigkeitsmakros, die dabei helfen, Code von der Präsentation in Ansichten zu trennen.

+0

Danke, Was sind die Entwurfsmuster in Spring MVC-Modul verwendet? – Tony

+8

Ich denke nicht, dass Spring Singleton für die Bohnen implementiert. Beachten Sie, dass eine Singleton-Scoped-Bean eine einzige Instanz ** pro Anwendungskontext ** hat. Wenn Ihre Anwendung also zwei Spring-Kontexte hat, die eine Singleton-Bean 'Foo' laden und Sie die Instanz von' Foo' pro Kontext abrufen, erhalten Sie zwei verschiedene Objektreferenzen. Stattdessen ist das hier angewandte Designmuster [Fliegengewicht] (http://en.wikipedia.org/wiki/Flyweight_pattern) –

+0

@Luiggi Mendoza du meinst, dass der Frühling keine Singleton-Objekte hat? Bitte erläutern Sie mir einige Erläuterungen. –

10

Und natürlich Dependency Injection oder IoC (Inversion of Control), die auf das gesamte BeanFactory/Application Zeug ist von zentraler Bedeutung.

4

Spring ist eine Sammlung von Best-Practice API-Mustern, Sie können eine Einkaufsliste von ihnen so lange wie Ihr Arm schreiben. Die Art, wie die API entworfen wird, ermutigt Sie (aber zwingt Sie nicht), diesen Mustern zu folgen, und die Hälfte der Zeit, die Sie ihnen folgen, ohne zu wissen, dass Sie dies tun.

6

Die DI-Sache ist eigentlich eine Art Strategie-Muster. Wann immer Sie eine Logik/Implementierung austauschen möchten, finden Sie in der Regel eine Schnittstelle und eine geeignete Setter-Methode für die Host-Klasse, um Ihre benutzerdefinierte Implementierung dieser Schnittstelle zu verkabeln.

0

Das Factory-Muster wird auch zum Laden von Beans über den BeanFactory- und Anwendungskontext verwendet.

1

Factory Method Muster: BeanFactory zum Erstellen einer Instanz eines Objekts Singleton: Instanztyp kann Singleton für einen Kontext sein Prototyp: Instanztyp kann Prototyp sein. Builder-Muster: Sie können auch eine Methode in einer Klasse definieren, die für die Erstellung komplexer Instanzen verantwortlich ist.

1

Observer beobachtbare: Es Veranstaltung in Application Mechanismus

0

Federbehälter erzeugt Objekte Bohne in Abhängigkeit von der Bohne Umfang (Singleton, Prototyp etc ..) verwendet wird. Das sieht also so aus, als würde man Abstract Factory pattern implementieren. In der internen Implementierung des Frühjahrs bin ich mir sicher, dass jeder Bereich an bestimmte Klassen von Fabriken gebunden sein sollte.

3

Service-Locator-Muster - ServiceLocatorFactoryBean enthält Informationen zu allen Beans im Kontext. Wenn Client-Code nach einem Service (Bean) fragt, der name verwendet, sucht er diese Bean einfach im Kontext und gibt sie zurück. Der Clientcode muss keinen federbezogenen Code zum Suchen einer Bean schreiben.