Lekcja 1.4: Kontener Spring

Kontener Spring


Pokazaliśmy, dlaczego programowanie przez interfejsy, wykorzystywanie zasady wstrzykiwania zależności czy też stosowanie obiektów proxy jest istotne w kontekście budowania czystego, poprawnego kodu, który daje się też sensownie testować. Teraz spróbujemy zademonstrować, że to co robiliśmy do tej pory manualnie, ręcznie, Spring będzie oferował nam z automatu. Czyli mówiąc krótko, spróbujemy teraz dodać Springa do naszego projektu. Spróbujemy uruchomić kontener Springowy i pokazać, że tak naprawdę ten core Springa to jest właśnie kontener, który będzie pozwalał na to, żeby realizować wstrzykiwanie zależności i programowanie aspektowe po to, żeby nasz kod z założenia był dużo lepszy. Pierwszą rzeczą, którą musimy zrobić, to jest oczywiście dodanie Springa na poziomie naszego projektu, czyli udajemy się ponownie do pom.xml i dodajemy potrzebną zależność. Zależność od spring-context. Uruchomienie Springa jest w zasadzie bardzo proste i sprowadza się do utworzenia instancji klasy, która implementuje taki kontener. My wybierzemy. Wariant a AnnotationConfigApplicationContext. To jest taki wariant kontenera, który pozwala na to, żeby określać konfigurację z użyciem adnotacji, na poziomie klas naszej aplikacji. Taki kontener powinien być prawidłowo zatrzymany, prawidłowo zamknięty, kiedy nasza aplikacja będzie kończyła działanie i w związku z tym powinniśmy albo wykonać metodę close na poziomie ApplicationContext, albo skorzystać z bloku try-with-resources, który pojawił się w 7 wersji Javy. Teraz dodatkowo musimy powiedzieć Springowi, gdzie ma szukać konfiguracji. Możemy to zrobić na wiele różnych sposobów. Jednym z nich jest podanie po prostu pakietu bazowego, który zostanie przeszukany pod kątem adnotacji konfiguracyjnych. Ten bazowy pakiet możemy podać w konstruktorze naszego kontenera. Kolejnym krokiem, który musimy wykonać to konfiguracja naszych komponentów. Musimy powiedzieć Springowi, jakimi komponentami, elementami naszej aplikacji powinien on zarządzać. Żeby wskazać, że jakaś klasa powinna być komponentem Springowym, wystarczy dodać adnotację @Component. Spróbujemy to zrobić na poziomie naszego generatora, ale także tą samą adnotację dodamy na poziomie naszej usługi. Zwróćcie uwagę, że na poziomie tego serwisu mamy konstruktor, który przyjmuje generator identyfikatorów płatności, ponieważ oznaczyliśmy jedną z implementacji generatora adnotacją @Component to Spring automatycznie wstrzyknie, poda przez konstruktor ten nasz generator. Ostatnia część konfiguracyjna to dodanie tej samej adnotacji na poziomie naszego logera. Tu mamy dokładnie tę samą sytuację tzn. mamy konstruktor, który przyjmuje FakePaymentService a ponieważ FakePaymentService to jest, komponent on również zostanie wstrzyknięty na poziom naszej usługi logującej. Na koniec musimy jeszcze zmodyfikować klasę Application. Zdefiniowaliśmy nasze usługi jako komponenty Springowe, w związku z tym możemy teraz poprosić Springa o dostarczenie usługi, którą potrzebujemy wraz ze wszystkimi potrzebnymi zależnościami. Możemy to zrobić wykorzystując metodę getBean z kontekstu Springowego. W ramach tej metody powinniśmy podać typ oczekiwanego komponentu, ewentualnie jego nazwę. W naszym przypadku będzie to LoggingPaymentService. Dysponując usługą do realizacji płatności, możemy teraz. przenieść pozostałą część kodu na poziom bloku try, a także usunąć zbędny kod konfiguracyjny, który w tej chwili tak naprawdę jest realizowany po stronie Springa. Możemy teraz uruchomić aplikację. Wszystko działa dokładnie tak samo. Tym razem wstrzykiwanie zależności realizuje za nas kontener. Przy dużej aplikacji i kiedy komponentów będzie naprawdę sporo manualne zarządzanie zależnościami może być strasznie problematyczne. Spring w takim wypadku bardzo mocno nas odciąży i pozwoli na to, żebyśmy mogli wymieniać tę implementację naprawdę w bardzo elastyczny sposób. Zobaczcie, że wystarczy, że udamy się teraz do IncrementalPaymentIdGenerator, zakomentujemy adnotację komponent, a taką adnotację dodamy na poziomie naszej alternatywnej wersji generatora. Po uruchomieniu widzimy, że wykorzystujemy zupełnie inny wariant implementacji. Oczywiście w późniejszym czasie pokażę w jaki sposób można także wybierać implementację jeżeli jest ich dostępnych więcej.

Zaloguj się
Rejestracja jest darmowa!

Administratorem danych jest Sages Sp. z o.o. z siedzibą w Warszawie przy ul. Nowogrodzkiej 62c. Podanie danych jest dobrowolne. Osobie, której dane dotyczą przysługuje prawo wglądu do danych osobowych, ich zmiany oraz usunięcia w sposób określony w Polityce prywatności.

Please accept the Terms and Conditions to proceed.