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
- W pakiecie
pl.edu.agh.to.school.studentutwórz klasęStudentServicei oznacz ją adnotacją@Service. - W konstruktorze klasy dodaj wypisywanie informacji, że serwis studentów został utworzony.
- Uruchom ponownie całą aplikację. Sprawdź, czy serwis tworzy się poprawnie.
- Do klasy
StudentServicedodaj 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. - 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
- Aby przetestować wstrzykiwanie zależności zdefiniuj w pakiecie
pl.edu.agh.to.school.gradeklasęGradeService. Dodaj do niej metody reagujące na utworzenie/zniszczenie beana, podobnie jak w przypadkuStudentService. - Wstrzyknij beana
GradeServicedoStudentService. W tym celu dodaj atrybut do klasyStudentServicei zmodyfikuj konstruktor tak, by przyjmował instancjęGradeService. - 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
@Autowiredbezpośrednio przy atrybutach, ale nie jest to zalecane poza testami. - 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.
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