Jak to fajnie ujął James Shore – “Dependency Injection” is a 25-dollar term for a 5-cent concept„. Co w wolnym tłumaczeniu oznacza, że wstrzykiwanie zależności posiada bardzo skomplikowaną nazwą na coś co jest w gruncie rzeczy proste. Chodzi o to, żeby dostarczać obiektowi jego zmienne, zamiast tworzyć je wewnątrz obiektu:
Przykład pierwszy
Już na pierwszy rzut oka ta klasa wygląda podejrzanie – ma od razu zainicjalizowane zmienne:
class Person {
private String name = "John";
private String surname = "Doe";
}
Wersja która wspiera wstrzykiwanie zależności to po prostu klasa posiadająca konstruktor, który przyjmuje imię i nazwisko (lub też posiada settery). Nic szczególnego (na codzień wielokrotnie używamy wstrzykiwania zależności) :
class Person {
private String name;
private String surname;
Person(String name, String surname){
this.name = name;
this.surname = surname;
}
}
Przykład drugi
Częściej koncept wstrzykiwania zależności wykorzystywany jest do obsługi jakichś czynności – przykładowo zapisu do bazy danych:
class PersonService{
private PersonRepository repository = new OraclePersonRepository();
public getPerson(String name){
this.repository.getPersonByName(name);
}
}
Przejście do wersji wspierającej wstrzykiwanie zależności, będzie równie proste jak w poprzednim przykładzie:
class PersonService{
private PersonRepository repository;
PersonService(PersonRepository repository){
this.repository = repository;
}
public getPerson(String name){
this.repository.getPersonByName(name);
}
}