DI的细节实现
构造参数注入
将一个bean创建过程中构造方法需要的参数,通过Spring DI的方式,自动注入到构造方法中。
Setter注入
先通过一个无参的构造方法创建对象,然后通过属性的setter方法,将属性值注入到对象上。
支持注入的类型
-
普通字面量
- String
- Integer(int)
- Long(long)
- Byte(byte)
-
自动装配
自动装配支持的策略
-
byType
按照类型去IOC容器中找需要的bean,如果找到一个,则自动装配;如果没找到,不注入此属性;如果找到了多个匹配类型的bean,就会报错。
-
byName
按照名称去IOC容器中找需要的bean,如果找到就自动注入;如果没找到,不注入此属性。
-
constructor
工作原理和byType类似,也是按照类型去IOC容器中找对应的bean。不同的是注入的地方不是setter,而是构造方法的参数。
-
no (默认值)
如果没有打开自动注入,默认Spring不会自动装配需要的属性。
XML方式的DI
构造参数注入
-
常规写法
-
c命名空间简写
setter方式注入
setter注入能够注入的类型以及写法基本和构造参数注入时的写法一致,只不过将
-
常规用法
-
p命名空间简写
开启自动装配
提高自动装配时的权重
按类型自动装配时,不参与候选
注解方式的DI
-
构造参数注入
在构造方法上添加
@Autowired
注解,构造方法的参数就会自动注入进来 -
setter方法注入
方法有两种:
- 在属性的setter方法上添加
@Autowired
注解 - 在属性上添加
@Autowired
注解
- 在属性的setter方法上添加
提高自动装配时的权重
@Primary
@Component
public class Test {
}
public class Main {
@Primary
@Bean
public void test() {
return new Test();
}
}