dependency injection如何在Spring中工作?

我想知道spring如何dependency injection。 我想要使​​用低级逻辑。

更新:

我想知道如何将对象引用注入构造函数或setter方法,是通过Reflection还是一些字节代码级别。

从XML,注释或Java DSL(JavaConfig)读取依赖项的配置。 然后,Spring DI引擎使用JavareflectionAPI基于配置中的元数据连接依赖项。

Java组件/类应尽可能独立于其他Java类。 这增加了重用这些类并独立于其他类测试它们的可能性(unit testing)。 要将Java组件与其他Java组件分离,应该将对其他类的dependency injection其中,而不是类本身创建/查找此对象。

如果类A使用类B作为变量,则类A对类B具有依赖性。

如果使用dependency injection,则通过类A的构造函数将类B赋予类A – 然后将其称为构造注入; 或者通过一个二传手 – 这被称为二传手注射

dependency injection的一般概念称为控制反转。 类不应自行配置,但应从外部配置。

基于独立类/组件的设计增加了可重用性和测试软件的可能性。 例如,如果类A期望Dao(数据访问对象)用于从数据库接收数据,则可以轻松地创建另一个测试对象,该对象模拟数据库连接并将此对象注入A以测试A而不具有实际的数据库连接。

使用标准Java可以实现基于dependency injection的软件设计。

Spring通过提供提供配置和管理对创建对象的引用的标准方法,在使用依赖项注入时添加了一些简化。

更多阅读本文

编辑1

当Spring初始化其上下文时,它会创建在Spring应用程序context.xml文件中急切定义的所有bean。 现在假设您的Bean A具有B的依赖性,那么B的Obj已经在Spring中,因为它已经在Spring初始化时成功创建。 然后Spring将在A类中搜索setter方法,并在那里设置B的Obj。

EDIT2:

请阅读5.4.1 Setter Injection