Wprowadzenie do Spring Boot
Cykl życia komponentu

Cykl życia komponentu

W Springu kontener IoC jest powoływany do życia w momencie uruchomienia aplikacji, a następnie sam wyszukuje i tworzy wszystkie komponenty. Pojedynczy komponent to tzw. bean i jest reprezentowany przez klasę oznaczoną jedną z kilku specjalnych adnotacji (np. @Component, @Service).

Tworzenie beanów

  1. W pakiecie pl.edu.agh.to.school.student utwórz klasę StudentService i oznacz ją adnotacją @Service.
  2. W konstruktorze klasy dodaj wypisywanie informacji, że serwis studentów został utworzony.
  3. Uruchom ponownie całą aplikację. Sprawdź, czy serwis tworzy się poprawnie.
  4. Do klasy StudentService dodaj dwie metody. Jedną z nich oznacz adnotacją @PostConstruct, a drugą @PreDestroy. Możesz nazwać metody dowolnie, np. onServiceStarted/Destroyed(). W każdej z metod wypisz informację, która jednoznacznie powie, że dana metoda została wywołana.
  5. Uruchom ponownie aplikację i przeanalizuj sytuację. Czy wszystkie oznaczone metody zostały wywołane? Kto je wywołał?
    💡

    Zastanów się, jaki jest domyślny zakres (scope) działania beana utworzonego przez Springa. Ile obiektów danej klasy utworzy Spring przy uruchamianiu aplikacji?

Drzewo zależności

  1. Aby przetestować wstrzykiwanie zależności zdefiniuj w pakiecie pl.edu.agh.to.school.grade klasę GradeService. Dodaj do niej metody reagujące na utworzenie/zniszczenie beana, podobnie jak w przypadku StudentService.
  2. Wstrzyknij beana GradeService do StudentService. W tym celu dodaj atrybut do klasy StudentService i zmodyfikuj konstruktor tak, by przyjmował instancję GradeService.
  3. Uruchom aplikację. Sprawdź, czy oba beany nadal są inicjowane i jaka jest kolejność ich inicjalizacji.

    Zwróć uwagę, że przy wstrzykiwaniu nie były potrzebne żadne dodatkowe adnotacje. Jeśli podajemy argumenty przez konstruktor Spring sam domyśla się, co powinien zrobić. Istnieje też możliwość wstrzykiwania przy użyciu adnotacji @Autowired bezpośrednio przy atrybutach, ale nie jest to zalecane poza testami.

  4. Dodaj kolejne beany tak, aby zrealizować poniższe drzewo zależności. W każdym przypadku zdefiniuj metody @PostConstruct/@PreDestroy. Zastanów się w szczególności, w jaki sposób powinny działać beany oparte o interfejsy. Konfiguracja z pluginem

Jeśli wszystko poszło ok, to na koniec tej części zadania program powinien wypisywać takie informacje:

Console notification service is up
Grade book is up
Grade service is up
Student service is up
Student service is down
Grade service is down
Grade book is down
Console notification service is down