2016-02-17 28 views

Odpowiedz

6

Zgodnie z documentaion@Repository, @Service, @Controller są wszystkie synonimy. Wszystkie są po prostu specjalnościami adnotacji @Component. Tak więc, ogólnie rzecz biorąc, mogą one być używane jako jedne z drugich. Ale ... nie powinieneś tego robić.

Pierwsza przyczyna: dowolna z tych adnotacji wyjaśnić rolę Twojego składnika w aplikacji. Pokazy - czy ten składnik należy do kontrolera, usługi lub warstwy danych.

Drugi powód: niektóre z tych adnotacji przetwarzane różnie przez różne moduły Spring. Na przykład Spring Data JPA przetworzy @Repository i spróbuje zastąpić implementacją dowolny interfejs oznaczony tym znakiem. Spring również zastosuje automatyczne tłumaczenie wyjątku do takich klas. Inny przykład: Spring Web MVC przetwarzanie @Controller i użyj klas oznaczonych nim w mapowaniach adresów URL.

Faktycznie, w przyszłych wersjach niektóre moduły Spring mogą w szczególny sposób przetwarzać @Service. Nie tak proste @Component. Dlatego rada dokumentacja:

Jest również możliwe, że @Repository, @Service i @Controller może nieść dodatkowe semantykę w przyszłych wydaniach Spring Framework. Tak więc, jeśli wybierzesz między używaniem @ Component lub @Service dla swojej warstwy usług, @Service jest zdecydowanie lepszym wyborem.

1

To zależy od tego, czego używasz do końca frameworka. Teoretycznie nic się nie zmienia, ponieważ adnotacje są w zasadzie adnotacjami . To samo można powiedzieć o @Controller lub @Endpoint (dla Spring Ws i jest ich więcej).

Jednak wyrażają intencję tego, czym jest klasa (usługa, repozytorium) i wyjaśniają użytkownikowi, do której warstwy należy ta klasa.

Jeśli jednak używasz Spring do zarządzania transakcjami, to @Repository jest również wyzwalaczem dla tej klasy dla adding exception translation (zobacz także reference guide).

Mimo że nic nie ma ma, aby go złamać, prawdopodobnie nastąpi to w pewnym momencie.