2009-04-16 13 views
66

Jakie wzorce są używane w ramach Spring Framework?Jakie wzorce są używane w ramach Spring Framework?

+0

Zawiera więcej niż 10 wzorów, w tym ..MVC, kontroler czołowy, Zobacz pomocnika, Singleton, prototyp, fabryka itp. http://www.javabench.in/2012/02/design-patterns-being-used-in-spring.html –

+0

Wzory projektowe - Wzorzec MVC, Wzorzec proxy, Wzorzec fabryczny, Wzór jednolity, Wzór metody szablonu, FrontController Pattern, View Helper Pattern, Prototype PatternDI/IOC Pattern. Odniesienie-http: //javainuse.com/spring/spring-design-patterns – Gordan

Odpowiedz

51

Istnieje wiele różnych wzorców projektowych używanych, ale istnieje kilka oczywistych:

  • Proxy - używany intensywnie w AOP i remoting.

  • Singleton - fasola zdefiniowana w wiosennych plikach konfiguracyjnych domyślnie jest singletonami.

  • Metoda szablonowa - stosowana szeroko w celu radzenia sobie z powtarzającym się kodem standardowym (np. Zamykanie połączeń w sposób czysty itp.). Na przykład: JdbcTemplate, JmsTemplate, JpaTemplate.


Aktualizacja następujące uwagi: Na MVC, może chcesz przeczytać MVC Reference

pewne oczywiste wzorce użytkowania w MVC:

  • Model View Controller :-). Zaletą Spring MVC jest to, że twoje kontrolery są POJO w przeciwieństwie do serwletów. To ułatwia testowanie kontrolerów. Należy zwrócić uwagę, że kontroler musi tylko zwrócić logiczną nazwę widoku, a wybór widoku pozostawić osobnemu ViewResolver. Ułatwia to ponowne wykorzystanie kontrolerów dla różnych technologii przeglądania.

  • Front Controller. Spring zapewnia DispatcherServlet, aby upewnić się, że przychodzące żądanie zostanie wysłane do kontrolerów.

  • View Helper - Wiosna ma wiele niestandardowych znaczników JSP i makr prędkości, aby pomóc w oddzieleniu kodu od prezentacji w widokach.

+0

Dzięki, Jakie są wzorce projektowe używane w module Spring MVC? – Tony

+8

Nie sądzę, że Spring implementuje singleton dla fasoli. Zauważ, że komponent o pojedynczej skali ma jedną instancję ** dla każdego kontekstu aplikacji **. Tak więc, jeśli twoja aplikacja ma dwa konteksty Spring, ładują one ten sam singleton bean 'Foo' i pobierasz instancję' Foo' na kontekst, otrzymasz dwa różne odniesienia do obiektów. Zamiast tego zastosowany tutaj wzór to [flyweight] (http://en.wikipedia.org/wiki/Flyweight_pattern) –

+0

@Luiggi Mendoza masz na myśli to, że wiosna nie ma obiektów singleton? proszę wyjaśnij mi pewne wyjaśnienie. –

10

I oczywiście wtrysk zależności lub IoC (inwersja kontroli), która jest kluczowa dla całej rzeczy BeanFactory/ApplicationContext.

4

Wiosna to zbiór wzorców API najlepszych praktyk, możesz zapisać listę zakupów tak długo, jak ramię. Sposób, w jaki interfejs API jest zaprojektowany, zachęca Cię (ale nie zmusza) do podążania za tymi wzorami, a połowę czasu, kiedy podążasz za nimi, nie wiedząc, że to robisz.

6

Rzeczy typu DI to rodzaj wzorca strategii. Ilekroć chcesz być wymienianą logiką/implementacją, zazwyczaj znajdujesz interfejs i odpowiednią metodę ustawiającą na klasie hosta, aby łączyć niestandardową implementację tego interfejsu.

0

Fabryczny wzór jest również używany do ładowania fasoli przez kontekst fasoli i aplikacji.

1

Metoda Factory patter: BeanFactory do tworzenia instancji obiektu Singleton: typ instancji może być pojedyncza dla kontekstu Prototyp: typ instancji może być prototypem. Wzorzec konstruktora: można również zdefiniować metodę w klasie, która będzie odpowiedzialna za tworzenie złożonej instancji.

1

obserwatora Obserwowalne: jest stosowany mechanizm zdarzeń ApplicationContext w

0

Wiosna pojemnik wytwarza przedmiotów fasoli w zależności od zakresu fasoli (Singleton prototyp itp ..). Wygląda to na implementację Abstract Factory pattern. W wewnętrznej implementacji Wiosennej jestem pewien, że każdy zakres powinien być powiązany z konkretną klasą fabryczną.

3

Wzorzec lokalizatora usługi - ServiceLocatorFactoryBean przechowuje informacje o wszystkich ziarnach w kontekście. Gdy kod klienta prosi o usługę (komponent bean) za pomocą nazwy, po prostu lokalizuje tę fasolę w kontekście i zwraca ją. Kod klienta nie musi zapisywać kodu źródłowego, aby zlokalizować komponent bean.