SPRING – @Component vs. @Service vs. @Repository vs. @Controller

Cześć.

W poprzednim artykule wyjaśniałem różnicę między adnotacjami, których zadaniem jest wstrzykiwanie zależności.
Niestety, obiekty, które chcemy wstrzykiwać, nie są tworzone „automagicznie”, musimy je utworzyć np. poprzez  adnotacje.
W tym poście postaram się wyjaśnić różnice między:
–  @Component
–  @Service
–  @Repository
–  @Controller


Jeżeli spojrzymy w dokumentacje, to zobaczymy, że główną adnotacją jest @Component. Pozostałe adnotacje po prostu ją rozszerzają.
Oto one:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Component {
	String value() default "";
}
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Repository {
	String value() default "";
}
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Service{
	String value() default "";
}
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller{
	String value() default "";
}

Możemy również zauważyć, że w konkretnych adnotacjach nie zostało dodane nic ciekawego, więc czy są jakieś różnice między nimi?
Otóż odpowiedź brzmi – właściwie nie, a przynajmniej nieznaczne. W większości przypadków możemy używać ich zamiennie i nic złego się nie stanie.
Jest co prawda kilka kosmetycznych różnic, które postaram się teraz przedstawić:
–  każda z adnotacji ma swoje konkretne przeznaczenie:
@Controller – wskazuje kontroler w warstwie prezentacji
@Repository – wskazuje bean w warstwie przechowywania danych
@Service – serwis w warstwie logiki biznesowej
i tak powinniśmy ich używać, żeby ktoś, kto będzie czytał nasz kod,  (a to pewnie nastąpi) od razu wiedział, do czego służy odpowiedni bean.
–  dzięki adnotacji @Repository wyjątki związane z bazą danych są zamieniane na „springowe”  DataAccessExceptions
–  jeżeli chcemy używać aspektów (AOP), możemy chcieć wykonywać  inne zdarzenia przed beanami logiki biznesowej, a inne przed kontrolerami – wtedy używanie odpowiednich adnotacji ułatwi sprawę
–  nie mamy pewności, że twórcy Springa w następnej wersji nie dodadzą czegoś nowego, do którejś z adnotacji, co zmieni jej działanie, więc bezpieczniej będzie już teraz używać ich w odpowiednich miejscach.

Dziękuje za uwagę.
Pozdrawiam.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *