English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Зависимая инъекция (DI) - это шаблон проектирования, который позволяет удалить зависимости из программного кода, чтобы можно было легко управлять и тестировать приложение. Зависимая инъекция делает наш код более разреженно耦ченным. Чтобы лучше понять DI, давайте сначала рассмотрим поиск зависимостей (DL):
Поиск зависимостей - это метод получения ресурсов после их запроса. Например, существует несколько методов получения ресурсов:
A obj = new AImpl();
Таким образом, мы можем получить ресурсы (например, экземпляр класса A) напрямую с помощью ключевого слова new. Другой метод - метод фабрики:
A obj = A.getA();
Таким образом, мы получаем ресурсы, вызывая статический метод фабрики getA().
Или, мы можем получить ресурсы через JNDI (Java Naming and 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) через конструктор или метод setter.
Фреймворк Spring предоставляет два метода инъекции зависимостей
Через конструктор Через setter метод