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
@Component public class ShoppingCard { private List<product> productList; public ShoppingCard() { this.productList = new ArrayList<>(); } public void addProductToShoppingCard(Product product) { productList.add(product); } }
public class Product { private long id; private String name; public Product(long id, String name) { this.id = id; this.name = name; } }
public class Shop { @Autowired private ShoppingCard shoppingCard; public void purchase() { shoppingCard.addProductToShoppingCard(new Product(1, "Milk")); shoppingCard.addProductToShoppingCard(new Product(2, "Tea")); 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