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
Szkolenia live dla developerów • praktyczna wiedza, realne case’y, zero lania wody 
