Инжектирането на зависимост (DI) е модел на проектиране, който премахва зависимостта от програмния код, така че да може лесно да се управлява и тества приложението. Инжектирането на зависимост прави нашия програмен код слабо свързан. За да разберем по-добре DI, нека първо разберем търсенето на зависимост (DL):
Търсене на зависимост
Търсенето на зависимост е подход, при който получаваме ресурса след търсене. Може да има различни начини за получаване на ресурса, например:
A obj = new AImpl();
По този начин получаваме ресурса (екземпляр от A клас) директно чрез нова ключова дума. Друг начин е фабричният метод:
A obj = A.getA();
По този начин получаваме ресурса (екземпляр на A клас) чрез извикване на статичния фабричен метод getA().
Като алтернатива можем да получим ресурса чрез JNDI (Java Naming Directory Interface) като:
Context ctx = new InitialContext(); Context environmentCtx = (Context) ctx.lookup('java:comp/env'); A obj = (A)environmentCtx.lookup('A');
Може да има различни начини да получите ресурса, за да получите ресурса. Нека да видим проблема в този подход.
Проблеми при търсене на зависимости
Има основно два проблема при търсенето на зависимост.
Инжектиране на зависимост
Инжектирането на зависимостта е модел на проектиране, който премахва зависимостта на програмите. В такъв случай ние предоставяме информацията от външен източник като XML файл. Това прави нашия код слабо свързан и по-лесен за тестване. В такъв случай ние пишем кода като:
class Employee{ Address address; Employee(Address address){ this.address=address; } public void setAddress(Address address){ this.address=address; } }
В такъв случай екземплярът на класа Address се предоставя от външен източник, като например XML файл, чрез метод на конструктор или сетер.
Два начина за извършване на инжектиране на зависимости в Spring framework
Spring framework предоставя два начина за инжектиране на зависимост
- От Конструктор
- По метода на сетер
Предстоящи теми в Spring Dependency Injection
Инжектиране на зависимост от конструкторНека да видим как можем да инжектираме зависимост чрез конструктор.
Инжектиране на зависимост чрез метод на настройка
Нека да видим как можем да инжектираме зависимост чрез метод на сетер.