Подтвердить что ты не робот

Как работает инъекция зависимостей в Spring?

Я хочу знать, как spring выполняет инъекцию зависимостей. Я хочу использовать низкоуровневую логику.

Обновление:

Я хочу знать, как ссылки на объекты вводятся в конструкторы или методы setter, это через Reflection или некоторый уровень байтового кода.

4b9b3361

Ответ 1

Конфигурация зависимостей читается из XML, аннотаций или Java DSL (JavaConfig). Затем механизм Spring DI подключает зависимости, основанные на метаданных, из конфигурации с использованием API отражения Java.

Ответ 2

Компоненты/классы Java должны быть как можно более независимыми от других классов Java. Это увеличивает возможность повторного использования этих классов и тестирования их независимо от других классов (Unit Testing). Чтобы развязать компоненты Java от других компонентов Java, в них следует вводить зависимость от некоторого другого класса, а сам класс создает/находит этот объект.

Класс A имеет зависимость от класса B, если класс A использует класс B как переменную.

Если используется инъекция зависимости, класс B присваивается классу A через конструктор класса A - это называется конструктивной инъекцией; или через сеттер - это называется так называемой установкой инъекции

Общая концепция инъекции зависимостей называется инверсией управления. Класс не должен настраиваться сам, но должен быть настроен извне.

Дизайн, основанный на независимых классах/компонентах, увеличивает возможность повторного использования и возможность тестирования программного обеспечения. Например, если класс A ожидает Дао (объект доступа к данным) для получения данных из базы данных, вы можете легко создать другой тестовый объект, который издевается над подключением к базе данных и вставляет этот объект в для тестирования A без фактического подключения к базе данных.

Конструкция программного обеспечения, основанная на инъекции зависимостей, возможна со стандартной Java.

Spring просто добавляет некоторые упрощения при использовании инъекции зависимостей, предоставляя стандартный способ предоставления конфигурации и управления ссылкой на созданные объекты.

Подробнее... this

Edit1:

Когда Spring инициализирует свой контекст, он создает все beans, заданные в файле Spring application context.xml. Теперь предположим, что ваш Bean A имеет зависимость от B, тогда Obj из B уже имеет Spring, поскольку он был успешно создан при инициализации Spring. Затем Spring будет искать метод setter в классе A и будет устанавливать там B Obj.

Edit2:

Пожалуйста, прочтите 5.4.1 Инъекция сеттера