@Service vs @Controller
@Service: klasa to „Fasada usług biznesowych” (w sensie wzorców Core J2EE) lub coś podobnego.
@Controller: wskazuje, że klasa z adnotacjami jest „kontrolerem” (np. Kontrolerem sieciowym).
---------- Znajdź przydatne notatki na temat głównych stereotypów
http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/stereotype/Component.html
@interface Component
@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
public @interface Component
Wskazuje, że klasa z adnotacjami jest składnikiem. Takie klasy są uważane za kandydatów do automatycznego wykrywania podczas korzystania z konfiguracji opartej na adnotacjach i skanowania ścieżek klas.
Inne adnotacje na poziomie klasy również mogą być traktowane jako identyfikujące komponent, zazwyczaj jest to specjalny rodzaj komponentu: np. Adnotacja @Repository lub adnotacja @Aspect firmy AspectJ.
@interface Controller
@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Component
public @interface Controller
Wskazuje, że klasa z adnotacjami jest „kontrolerem” (np. Kontrolerem sieciowym).
Ta adnotacja służy jako specjalizacja @Component, umożliwiając automatyczne wykrywanie klas implementacji poprzez skanowanie ścieżek klas. Jest zwykle używany w połączeniu z metodami obsługi z adnotacjami opartymi na adnotacji RequestMapping.
@ interfejs Usługa
@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Component
public @interface Service
Wskazuje, że klasa z adnotacjami jest „Usługą”, pierwotnie zdefiniowaną przez Domain-Driven Design (Evans, 2003) jako „operację oferowaną jako interfejs, który jest samodzielny w modelu, bez stanu hermetyzacji”. Może również wskazywać, że klasa jest „Fasada usług biznesowych” (w sensie wzorców Core J2EE) lub czymś podobnym. Ta adnotacja jest stereotypem ogólnego przeznaczenia, a poszczególne zespoły mogą odpowiednio zawęzić semantykę i użycie.
Ta adnotacja służy jako specjalizacja @Component, umożliwiając automatyczne wykrywanie klas implementacji poprzez skanowanie ścieżek klas.
Repozytorium @interface
@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Component
public @interface Repository
Wskazuje, że klasa z adnotacjami jest „repozytorium”, pierwotnie zdefiniowanym przez Domain-Driven Design (Evans, 2003) jako „mechanizm hermetyzacji zachowań przechowywania, pobierania i wyszukiwania, który emuluje zbiór obiektów”. Zespoły wdrażające tradycyjne wzorce J2EE, takie jak „Obiekt dostępu do danych”, mogą również zastosować ten stereotyp do klas DAO, chociaż przed zrobieniem tego należy dobrze zrozumieć różnicę między obiektem dostępu do danych a repozytoriami w stylu DDD. Ta adnotacja jest stereotypem ogólnego przeznaczenia, a poszczególne zespoły mogą odpowiednio zawęzić semantykę i użycie.
Klasa z adnotacjami w ten sposób kwalifikuje się do tłumaczenia Spring DataAccessException, gdy jest używana w połączeniu z PersistenceExceptionTranslationPostProcessor. Klasa z adnotacjami jest również wyjaśniona co do jej roli w ogólnej architekturze aplikacji pod kątem narzędzi, aspektów itp.
Od Spring 2.5 ta adnotacja służy również jako specjalizacja @Component, umożliwiając automatyczne wykrywanie klas implementacji poprzez skanowanie ścieżek klas.