Spring daje możliwość automatycznego zarządzania instancjami klas. Zwalnia to programistę z ręcznego tworzenia instancji klas.
Które klasy powinny być zarządzane przez kontekst Spring?
Zależy od przypadku, ale zasadniczo są to klasy, które w ciągu życia aplikacji mają tylko jedną instancję.
Może być to klasa, której instancja w cyklu życia aplikacji jest tworzona tylko raz. Stanowi ona dobrą kandydaturę, aby oznaczyć ją adnotacją służącą do automatycznego zarządzania instancją.
Przykład
Rozpatrzmy wybrany przypadek sklepu internetowego. Mamy w nim koszyk i listę produktów. Ponieważ koszyk w całej aplikacji jest tylko jeden, to dobrze on nadaje się do oznaczenia go jako klasa zarządzana przez kontekst Spring.
Osobną kwestią będzie lista produktów. Ponieważ ich w koszyku może być wiele – co też za tym idzie możemy tworzyć je dynamicznie, toteż klasę Product można pozostawić niezarządzaną.
Implementacja
2 | public class ShoppingCard { |
4 | private List<product> productList; |
6 | public ShoppingCard() { |
7 | this .productList = new ArrayList<>(); |
10 | public void addProductToShoppingCard(Product product) |
12 | productList.add(product); |
6 | public Product( long id, String name) { |
4 | private ShoppingCard shoppingCard; |
6 | public void purchase() { |
7 | shoppingCard.addProductToShoppingCard( new Product( 1 , "Milk" )); |
8 | shoppingCard.addProductToShoppingCard( new Product( 2 , "Tea" )); |
9 | shoppingCard.addProductToShoppingCard( new Product( 3 , "Bread" )); |
Aby w kodzie programu skorzystać z klasy która jest zarządzania przez Spring należy pole w klasie oznaczyć adnotacją (co jest widoczne w klasie Shop):
- @Autowired – pozwala ona na wstrzyknięcie instancji klasy w oznaczone pole.
Tak oznakowane pole można już w pełni wykorzystywać – jest ona automatycznie inicjalizowana przez Spring. Spring poszukuje wszystkie klasy, które zostały opatrzone jedną z adnotacji:
- @Component
- @Controller
- @RestController
- @Repository
- @Service
A następnie w przypadku odnalezienia, wykrzykuje jej instancje do pola oznaczonego adnotacją @Autowired. Ten rodzaj wstrzykiwania nazywa się wstrzykiwaniem do pól.
W kolejnej części kursu zostanie przedstawione inne sposoby wstrzykiwania zależności.
Cały kurs opisujący mechanikę i działanie Spring Boot od podstaw znajdziesz tutaj: Kurs Spring Boot