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
- 如何在jersey2 / hk2应用程序中获取Jackson Object Mapper的引用
- 使用spring的条件bean
- 如何在spring bean中注入String属性
- ClassCastException:org.springframework.orm.jpa.EntityManagerHolder无法强制转换为org.springframework.orm.hibernate5.SessionHolder
- 如何通过CDI实现命令模式?
- Struts2中的dependency injection访问会话Scoped Bean
- 在IoC容器中将依赖项设置为NULL并在运行时提供依赖项是不好的做法?
- 使用applicationcontext.getbean vs @configurable 的优点
- 在JSF 2.0中注入Bean