2009-04-16 10 views
66

Quali schemi di progettazione vengono utilizzati nel framework Spring?Quali schemi di progettazione vengono utilizzati nel framework Spring?

+0

Include più di 10 modelli, tra cui ..MVC, Front controller, Visualizza Helper, Singleton, Prototype, Factory ecc. http://www.javabench.in/2012/02/design-patterns-being-used-in-spring.html –

+0

Design Pattern - Pattern MVC, Pattern Proxy, Pattern di fabbrica, Pattern Singleton, Pattern metodo Pattern, Modello di FrontController, Visualizza modello di supporto, Mototipo PatternDI/Motivo IOC. Riferimento: http: //javainuse.com/spring/spring-design-patterns – Gordan

risposta

51

Ci sono un sacco di diversi modelli di progettazione utilizzati, ma ci sono alcune fra le più ovvie:

  • Proxy - usato pesantemente in AOP e remoting.

  • Singleton - i bean definiti nei file di configurazione di primavera sono singleton per impostazione predefinita.

  • Metodo modello: ampiamente utilizzato per gestire codici ripetuti di piastre (ad es. Collegamenti di chiusura puliti, ecc.). Ad esempio JdbcTemplate, JmsTemplate, JpaTemplate.


Aggiornamento commenti: Per MVC, si potrebbe desiderare di leggere il MVC Reference

Alcuni modelli evidenti in uso in MVC:

  • Model View Controller :-). Il vantaggio con Spring MVC è che i controller sono POJO anziché servlet. Questo facilita il test dei controller. Una cosa da notare è che al controller è richiesto solo di restituire un nome di vista logico e la selezione della vista è lasciata a un numero di ViewResolver separato. Ciò semplifica il riutilizzo dei controller per le diverse tecnologie di visualizzazione.

  • Front Controller. Spring fornisce DispatcherServlet per garantire che una richiesta in arrivo venga inviata ai controller.

  • View Helper - Spring ha un numero di tag JSP personalizzati e macro di velocità, per facilitare la separazione del codice dalla presentazione nelle viste.

+0

Grazie, Quali sono gli schemi di progettazione utilizzati nel modulo MVC di Spring? – Tony

+8

Non penso che Spring implementa il singleton per i fagioli. Si noti che un bean con scope singleton avrà una singola istanza ** per contesto applicativo **. Quindi, se la tua applicazione ha due contesti Spring, caricano uno stesso bean singleton 'Foo' e recuperi l'istanza di' Foo' per contesto, otterrai due riferimenti a oggetti diversi. Invece, il modello di progettazione qui applicato è [flyweight] (http://en.wikipedia.org/wiki/Flyweight_pattern) –

+0

@Luiggi Mendoza vuoi dire che la primavera non ha oggetti singoli? per favore spiegami con qualche chiarimento –

10

E di iniezione di dipendenza naturalmente, o IOC (inversione di controllo), che è al centro dell'intero roba BeanFactory/ApplicationContext.

4

Spring è una raccolta di modelli di API best-practice, è possibile scrivere una lista della spesa di loro purché il braccio. Il modo in cui è progettata l'API ti incoraggia (ma non ti obbliga) a seguire questi schemi e metà del tempo in cui li segui senza sapere che lo stai facendo.

6

La cosa DI è in realtà una sorta di modello di strategia. Ogni volta che vuoi essere un po 'logico/implementabile scambiabile, in genere trovi un'interfaccia e un metodo setter appropriato nella classe host per collegare l'implementazione personalizzata di tale interfaccia.

0

Il modello di fabbrica viene anche utilizzato per caricare i fagioli attraverso il contesto BeanFactory e Application.

1

Factory Method patter: BeanFactory per creare un'istanza di un oggetto Singleton: Tipo esempio può essere singleton per un contesto prototipo: Tipo esempio può essere prototipo. Schema costruttore: puoi anche definire un metodo in una classe che sarà responsabile della creazione di un'istanza complessa.

1

Observer osservabili: è usato in caso di meccanismo di ApplicationContext

0

contenitore primavera genera oggetti di fagioli a seconda del campo di applicazione di fagioli (Singleton, prototipo, ecc ..). Quindi questo sembra implementare Abstract Factory pattern. Nell'implementazione interna della primavera, sono sicuro che ogni ambito dovrebbe essere associato a una specifica classe di fabbrica.

3

Modello localizzatore di servizio - ServiceLocatorFactoryBean mantiene le informazioni di tutti i bean nel contesto. Quando il codice client richiede un servizio (bean) usando il nome, esso semplicemente individua quel bean nel contesto e lo restituisce. Il codice cliente non ha bisogno di scrivere codice relativo alla molla per localizzare un bean.

Problemi correlati