2013-03-20 8 views
11

Przez kilka lat tworzyłem aplikacje internetowe w ramach Spring. Niedawno świeższego zespołu zadał mi pytanie, Wiosna ma adnotację @Component, jaki jest prawdziwy cel adnotacji @Repository, @Service, @Controller? Próbowałem dać mu odpowiedź, że nie ma między nimi żadnej różnicy, tylko po to, by zidentyfikować typy java. Jak wiadomo, w moim wyjaśnieniu brakuje nam perswazji, on tego nie kupił.Wiosna ma adnotację @Component, jaki jest prawdziwy cel adnotacji @Repository, @Service, @Controller?

Więc chcę zadać pytanie, jaki jest prawdziwy cel adnotacji @Repository, @Service, @Controller? jaka jest prawdziwa różnica między tymi adnotacjami?

Odpowiedz

8

To pytanie został poproszony wcześniej: What's the difference between @Component, @Repository & @Service annotations in Spring?

Wiosną 2.0 i nowszych, @Repository adnotacja jest markerem Każda klasa, która spełnia rolę lub stereotypu (znany również jako Danych Object Access lub DAO) repozytorium. Wśród zastosowań tego znacznika jest automatyczne tłumaczenie wyjątków.

Sprężyna 2.5 wprowadza dodatkowe adnotacje dotyczące stereotypów: @Component, @Service i @Controller. @Component jest generycznym stereotypem dla dowolnego komponentu zarządzanego przez sprężynę . @Repository, @Service i @Controller to specjalizacje @Component dla bardziej konkretnych przypadków użycia, dla przykładu , w warstwach trwałości, usług i prezentacji, odpowiednio .

Dlatego można opisywać swoje klasy komponentów, z @Component ale opisywanie ich @Repository, @Service lub @Controller zamiast twoje zajęcia są bardziej właściwie nadaje się do obróbki za pomocą narzędzi lub obcowania z aspektów. Na przykład te stereotypowe adnotacje są idealnymi obiektami do tworzenia punktów.

Tak więc, jeśli wybierzesz między używaniem @ Component lub @Service dla swojej warstwy usług, @Service jest zdecydowanie lepszym wyborem. Podobnie, jak podano powyżej, @Repository jest już obsługiwany jako znacznik automatycznego tłumaczenia wyjątków w warstwie trwałości.

+0

Dobre wyjaśnienie mojego pytania, całkowicie to rozumiem. Stijn Haus, dziękuję bardzo. –