2013-04-17 22 views
23

Zajmuję się tworzeniem aplikacji internetowej przy użyciu spring-mvc.Zalety stosowania wiosennych stereotypów?

Dostępne są teraz stereotypy @Controller, @Service i @Repository.

znalazłem @Controller szczególnie przydatna, szczególnie dlatego używam

<context:component-scan base-package="my.cool.controller"/> 

Teraz dotyczące @Service i @Repository dotąd wygląda

  1. Wyjątkami są lepiej traktowane, jeśli klasa jest opatrzony poprawnym stereotypem, ok, to jest zaleta, którą mogę uznać za pomocny w skanowaniu komponentów dla usług i DAO/repozytoriów, jednak nie podoba mi się pomysł wykorzystania skanowania komponentów, ponieważ spowalnia to czas działania aplikacji i jest to dla mnie kluczowa cecha (nawet jeśli trwa to tylko 1 sekundę i raz w tygodniu przestawiam się ponownie).

A więc, oprócz lepszych wyjątków, masz jakąkolwiek inną przewagę? Czy klasy adnotujące mają wpływ na wydajność?

+1

Spójrz na to http://stackoverflow.com/questions/5645864/performance-difference-between-spring-javaconfig-xml-config-and-annotations –

Odpowiedz

48

Wyjaśnienie stereotypów:

  • @Service - Opisywanie wszystkich klas usług z @Service. Ta warstwa zna jednostkę pracy. Cała logika biznesowa będzie w klasach usług. Zasadniczo metody warstwy usług są objęte transakcją. Można wykonać wiele połączeń DAO z metody usługi, jeśli jedna transakcja się nie powiedzie, wszystkie transakcje powinny zostać wycofane.
  • @Repository - Opisuj wszystkie swoje klasy DAO za pomocą @Repository. Cała logika dostępu do bazy danych powinna należeć do klas DAO.
  • @Component - Opisuj pozostałe komponenty (na przykład klasy zasobów REST) ​​ze stereotypem komponentu.
  • @Autowired - Pozwól wiosce na automatyczne łączenie innych fasoli z klasami przy użyciu adnotacji @Autowired.

@Component to ogólny stereotyp dla każdego komponentu zarządzanego przez Spring. @Repository, @Service i @Controller są specjalizacjami @Component dla bardziej konkretnych przypadków użycia, na przykład w warstwach trwałości, usług i prezentacji, odpowiednio.

Powodów do korzystania z nich:

  • Główną zaletą korzystania @Repository lub @Service nad @Component jest to, że łatwo jest napisać punkt przekroju AOP, że cele, na przykład, wszystkie klasy z uwagami @ Magazyn.
  • Nie musisz pisać definicji bean w pliku xml kontekstu. Zamiast tego należy adnotować klasy i wykorzystywać je przez autowiring.
  • Adnotacje specjalistyczne pomagają wyraźnie rozgraniczać warstwy aplikacji (w standardowej aplikacji 3-poziomowej).

Teraz, praktycznie wpływ na wydajność korzystania z kontekstowego ziarna xml & adnotacje są takie same. Skanowanie komponentów jest nieco droższe (podczas skanowania pod kątem usługi @Service, @Component). Adnotacje są "analizowane" za pomocą odbicia, xml - za pomocą parsera xml. Ale, jak powiedziałeś, jest to czas uruchamiania - zdarza się tylko raz. I na umiarkowanej maszynie zaczyna się dość szybko, nawet z adnotacjami.

+1

Nie jestem wielkim fanem autowiring, szczerze wolę ręcznie określać, która fasola jest wstrzykiwany (przy użyciu xml), z narzędziami takimi jak intellij, nie jest wielka sprawa, aby przeczytać kod. Poza tym AOP wydaje się interesujący, czy mógłbyś edytować swoją odpowiedź i podać mi szybki przykład (naprawdę nie potrzebujesz kodu, tylko przypadek użycia) –

+2

Proszę przejść do artykułów wyjaśnionych w następujących witrynach: http: //static.springsource. org/spring/docs/3.0.x/spring-framework-reference/html/aop.html i http://www.mkyong.com/spring3/spring-aop-aspectj-annotation-example/ –

1

Skanowanie komponentów pozwala na ręczne definiowanie każdego komponentu bean za pomocą konfiguracji xml lub java.

Wiele typów stereo służy do definiowania warstw, takich jak warstwa usługi, warstwa danych itp. Również w przypadku różnych typów stereo, jeśli chcesz zrobić coś konkretnego, możesz to zrobić.

+0

wiem co robi scan komponent, i wiem też, że to jest kosztowne, nie ma problemu z używaniem xml dla mnie. Jeśli chodzi o stereotypy i warstwy, o co nam chodzi, ale o to, co "Również w oparciu o różne typy stereo, jeśli chcesz zrobić coś konkretnego, możesz to zrobić." znaczy? Dowolny przykład? –

+0

Mam na myśli, że możesz zdefiniować więcej typów stereo, aby utworzyć więcej warstw, jeśli potrzebujesz. –

+0

Dość uczciwi, jak to oznacza przewagę nad powiedzeniem paczek lub konwencjami nazewnictwa (jako adwokat diabła tutaj, nie zrozumcie mnie źle :) –