Dlaczego musimy użyć @service
w implementacji usługi i @repository
w implementacji DAO. Nie ma problemu z wymianą adnotacji @service
i @repository
w MVC na wiosnę.Co się stanie, jeśli wymienimy adnotację @ service i @repository na wiosnę MVC
Odpowiedz
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.
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.
To prawdopodobnie zepsuje twoje transakcje. Usługa musi przekazywać transakcje, które wymagają propagacji do DAO. Oba są komponentami, więc tworzenie fasoli nie będzie problemem. – TheLostMind