我想知道spring如何依赖注入。我想要使用低级逻辑。
我想知道如何将对象引用注入到构造函数或setter方法中,是通过Reflection还是某些字节代码级别。
答案 0 :(得分:15)
Java组件/类应尽可能独立于其他Java类。这增加了重用这些类并独立于其他类测试它们的可能性(单元测试)。要将Java组件与其他Java组件分离,应该将对其他类的依赖注入到它们中,而不是类本身创建/找到此对象。
如果A类使用B类作为变量,则A类与B类有依赖关系。
如果使用依赖注入,则通过类A的构造函数将类B赋予类A - 然后将其称为构造注入;或者通过setter - 这称为setter injection
依赖注入的一般概念称为控制反转。类不应自行配置,但应从外部配置。
基于独立类/组件的设计增加了重用性和测试软件的可能性。例如,如果类A期望Dao(数据访问对象)用于从数据库接收数据,则可以轻松地创建另一个测试对象,该对象模拟数据库连接并将此对象注入A以测试A,而无需实际的数据库连接。 / p>
使用标准Java可以实现基于依赖注入的软件设计。
Spring通过提供提供配置和管理对创建对象的引用的标准方法,在使用依赖项注入时添加了一些简化。
更多阅读this
Edit1 :
当Spring初始化其上下文时,它会创建在Spring应用程序context.xml文件中定义的所有bean。 现在假设您的Bean A具有B的依赖性,那么B的Obj已经在Spring中,因为它已经在Spring初始化时成功创建。然后Spring将在A类中搜索setter方法,并在那里设置B的Obj。
编辑2:
答案 1 :(得分:10)
从XML,注释或Java DSL(JavaConfig)读取依赖关系的配置。然后,Spring DI引擎使用Java反射API基于配置中的元数据连接依赖项。