DI(Dependency Injection),即“依赖注入”。IoC是一个很大的概念,可以用不同的方式实现。其主要表现形式主要有两种,一种是依赖查找,另外一种就是依赖注入了。依赖注入即组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系。容器全权负责组件的装配,它会把符合依赖关系的对象通过JavaBean属性或者构造函数传递给需要的对象。通过JavaBean属性注射依赖关系的做法称为设置方法注入(Setter Injection);将依赖关系作为构造函数参数传入的做法称为构造器注入(Constructor Injection)。
注入方式
- 构造器注入
2. Setter 方法注入
3. 接口注入
在使用设值注入时有可能还不能保证某种依赖是否已经被注入,也就是说这时对象的依赖关系有可能是不完整的。而在另一种情况下,构造器注入则不允许生成依赖关系不完整的对象。
构造器注入可能会导致循环依赖自动装配模式
· no - 这是默认设置,表示没有自动装配。应使用显式 bean 引用进行装配。
· byName - 它根据 bean 的名称注入对象依赖项。它匹配并装配其属性与 XML 文件中由相同名称定义的 bean。
· byType - 它根据类型注入对象依赖项。如果属性的类型与 XML 文件中的一个 bean 名称匹配,则匹配并装配属性。
· 构造函数 - 它通过调用类的构造函数来注入依赖项。它有大量的参数。
· autodetect - 首先容器尝试通过构造函数使用 autowire 装配,如果不能,则尝试通过 byType 自动装配。