Przejd┼║ do tre┼Ťci

­čćĺ 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 3 votes
Article Rating
Tagi:
Subscribe
Powiadom o
guest
1 Komentarz
najnowszy
najstarszy oceniany
Inline Feedbacks
View all comments
Wojtek
Wojtek
1 miesi─ůc temu

super!

1
0
Would love your thoughts, please comment.x