CDI Contexts and Dependency Injection dostarcza programiście mechanizm, który automatycznie zarządza instancjami klas. Główne zalety to:
- Brak potrzeby tworzenia klas z użyciem słowa kluczowego new;
- Brak potrzeby przekazywania instancji klasy, by wywołać jej metodę w innej klasie.
Dla porównania
Kod napisany w Java SE:
public class Hello { public String sayHallo() { return "Hello!"; } }
public class Sample { public static void main(String[] args) { Hello hello = new Hello(); hello.sayHallo(); } }
Kod napisany w Springu
@SpringBootApplication public class HelloApplication { @Autowired Hello hello; public static void main(String[] args) { SpringApplication.run(HelloApplication.class, args); // uruchomienie kontekstu springa } @PostConstruct public void init() { System.out.println(hello.sayHallo()); } }
@Service public class Hello { public String sayHallo() { return "Hello!"; } }
Rezultat działania obu programów jest identyczny. Dla osób początkujących trudnością mogą być adnotacje. Przyswojenie tych zasad przekłada się na owocny zysk – kod dużo prostszy, krótszy, co determinuje łatwość jego utrzymania.
To co zasłużyło na specjalną uwagę to adnotacja w klasie Hello jaką jest @Service. Otóż, aby korzystać z mechanizmu zarządzania zależnościami należy wskazać Spring’owi klasę, którą chcemy objąć takimi korzyściami. Wyżej wspomniana adnotacja służy nam właśnie do tego.
Adnotacja @Component jest nabardziej ogólna adnotacją jaką można w tym celu wykorzystać. Jest to informacja tylko i wyłącznie dla kompilatora, że ta klasa będzie zarządzania przez kontekst Spring.
Do dyspozycji są również inne – wyspecjalizowane adnotacje, które pełnią tą samą funkcje, jednak są zalecane do stosowania w zależności od przypadku. Są tą:
- @Component – wspomniany na początku najbardziej ogólny
- @ Repository – dedykowana dla klas, których zdaniem jest przechowywanie, agregowane danych
- @Service – dedykowana klasom, które dostarczają usługi
- @Controller/@RestController – dedykowany dla warstwy prezentacji lub/i dla API aplikacji
O klasach, które posiadają jedną z powyższych adnotacji oraz zostały uruchomione w ramach kontekstu Spring – nazwa się obiektami zarządzanymi.
Kolejny artykuł przedstawi przypadki kiedy wykorzystać mechanizm zarządzania beanów, a kiedy pozostawić klasę niezarządzaną.
Cały kurs opisujący mechanikę i działanie Spring Boot od podstaw znajdziesz tutaj: Kurs Spring Boot