馃啋 Spring – Zrozumie膰 Adnotacje Wstrzykiwania Zale偶no艣ci 馃憣

Spring pozwala na manualn膮 oraz automatyczn膮 rejestracj臋 bean贸w. Do manualnej rejestracji zale偶no艣ci tworzymy w艂asne configi (jak tutaj). Natomiast w celu automatycznej rejestracji, Spring udost臋pnia nam adnotacje zwane stereotypami.


Cze艣膰聽馃檪

Dzi艣 zajmiemy si臋 om贸wieniem poszczeg贸lnych stereotyp贸w. Kiedy艣 na rozmowie rekrutacyjnej dosta艂em r贸wnie偶 pytanie o stereotypy i kiedy ich u偶ywa膰, wi臋c o tym te偶 wspomn臋.

W dzisiejszym artykule:


Mechanizm wstrzykiwania zale偶no艣ci

Podczas pierwszych wyda艅 Springa, wszystkie u偶ywane beany by艂y deklarowane w plikach XML. Dla wi臋kszych projekt贸w, szybko sta艂o si臋 to trudnym zadaniem. Na szcz臋艣cie ludzie od Springa do艣膰 szybko rozpoznali problem. W p贸藕niejszych wersjach, dostarczone zosta艂o wstrzykiwanie zale偶no艣ci przy pomocy andotacji i/lub konfiguracji opartej na Javie. Oznacza to, 偶e zamiast deklarowania bean贸w u偶ywaj膮c plik贸w XML, mo偶emy wstrzykiwa膰 zale偶no艣ci poprzez adnotacje, kt贸re przy odpowiedniej konfiguracji zostan膮 automatycznie zaczytane przez Springa.

Aby w艂膮czy膰 automatyczn膮 rejestracj臋 bean贸w w przypadku czystego Springa, na klasie konfiguracyjnej nale偶y do艂膮czy膰 adnotacj臋 @ComponentScan. W przypadku projektu spring bootowego nie musimy niczego dodawa膰. Pakiety a zarazem klasy, znajduj膮ce si臋 pod klas膮, kt贸ra uruchamia nasz膮 aplikacj臋 zostan膮 automatycznie zeskanowane. Jest to oczywi艣cie zas艂uga adnotacji @SpringBootApplication, kt贸ra pod spodem posiada @ComponentScan.


Stereotypy

Wiedz膮c ju偶, 偶e Spring umo偶liwia nam wstrzykiwanie zale偶no艣ci za pomoc膮 adnotacji, jakich adnotacji nale偶y u偶ywa膰? Adnotacje jakich mo偶emy u偶y膰 nazywa si臋 stereotypami, dlatego 偶e zosta艂y one umieszczone w pakiecie stereotype. Adnotacje te pozwol膮 Springowi na zarejestrowanie nowego beana, ale trzeba uwa偶a膰!

Uwaga uwaga – tak naprawd臋 jedyn膮 adnotacj膮, kt贸ra jest automatycznie wykrywana przez Springa jest adnotacja @Component! W praktyce jednak wygl膮da to tak, 偶e ka偶da z adnotacji ’potomnych’ (@Controller, @Service, @Repository) dodaje adnotacj臋 @Component w swojej deklaracji. Wynikiem tego jest oczywi艣cie to, 偶e nasze klasy s膮 rejestrowane jak nale偶y.


R贸偶nice pomi臋dzy poszczeg贸lnymi adnotacjami

W tym podrozdziale om贸wimy ka偶d膮 z wcze艣niej wspomnianych adnotacji.

  • @Component – to og贸lny stereotyp dowolnego komponentu zarz膮dzanego przez Springa. Je偶eli bean, kt贸ry chcesz oznaczy膰 nie pasuje do 偶adnej innej kategorii to ta adnotacja b臋dzie odpowiednia.
  • @Repository – stereotyp dla warstw persystencji. Jedn膮 z zalet korzystania z tej adnotacji jest to, 偶e ma ona w艂膮czone automatyczne t艂umaczenie wyj膮tk贸w. Wyj膮tki zg艂aszane w klasach z adnotacj膮 @Repository zostan膮 automatycznie przet艂umaczone na podklasy DataAccessExeption Springa.
  • @Service – stereotyp dla warstw us艂ug. W klasach z t膮 adnotacj膮 zawarta jest zazwyczaj logika biznesowa aplikacji.
  • @Controller聽– stereotyp dla warstw prezentacji (Spring MVC). DispatcherServlet b臋dzie szuka艂 adnotacji @RequestMapping w klasach, kt贸re s膮 opatrzone adnotacjami za pomoc膮 @Controller, ale nie za pomoc膮 @Component. Cz臋sto spotkasz si臋 te偶 zapewne z bardzo podobn膮 adnotacj膮 @RestController, kt贸ra jest w艂a艣ciwie tym samym ale dodatkowo dok艂ada adnotacje @ResponseBody oraz automatycznie konwertuje odpowiedzi do formatu JSON/XML.

Podsumowanie

To wszystko je偶eli chodzi o adnotacje do wstrzykiwania zale偶no艣ci w Springu. Wszystkie z nich s膮 u偶ywane do automatycznego wykrywania bean贸w Springowych i zasadniczo zapewniaj膮 t臋 sam膮 funkcjonalno艣膰. R贸偶nice pomi臋dzy poszczeg贸lnymi adnotacjami s膮 minimalne ale istotne, np. @Controller czy @Repository. Jednak w przypadku adnotacji @Service oraz @Component, r贸偶nica polega tylko na semantyce.

殴r贸d艂a:


Za tydzie艅

Nowy rok :). A co za tym idzie pierwszy post w miesi膮cu, a wi臋c kr贸tkie podsumowanie miesi膮ca. My艣l臋, 偶e zmieni si臋 r贸wnie偶 format wypuszczania nowych artyku艂贸w w nowym roku, ale to ju偶 wi臋cej opisz臋 za tydzie艅.

5 1 vote
Article Rating
Tagi:
Subscribe
Powiadom o
guest
0 komentarzy
Inline Feedbacks
View all comments