Ответ 1
Конфигурация зависимостей читается из XML, аннотаций или Java DSL (JavaConfig). Затем механизм Spring DI подключает зависимости, основанные на метаданных, из конфигурации с использованием API отражения Java.
Я хочу знать, как spring выполняет инъекцию зависимостей. Я хочу использовать низкоуровневую логику.
Я хочу знать, как ссылки на объекты вводятся в конструкторы или методы setter, это через Reflection или некоторый уровень байтового кода.
Конфигурация зависимостей читается из XML, аннотаций или Java DSL (JavaConfig). Затем механизм Spring DI подключает зависимости, основанные на метаданных, из конфигурации с использованием API отражения Java.
Компоненты/классы 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: