版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/andy_zhang2007/article/details/88368901
在Spring
中,一个bean
对外部的依赖主要有以下几种情况 :
编号 | 依赖形式 | 简介 | 依赖注入过程的要点 |
---|---|---|---|
1 | 构造函数参数 | 构造函数参数即使不使用任何注解也会被作为bean 依赖处理 |
AbstractAutowireCapableBeanFactory#autowireConstructor |
2 | 使用@Autowired 注解的成员函数的参数 |
用于注入其他bean ,一般常见的基于public set 方法的属性依赖 |
AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement |
3 | 使用@Value 注解的成员属性 |
一般用于注入固定值或者来自外部配置的值 | AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement |
4 | 使用@Autowired 注解的成员属性 |
用于注入bean ,一般常见的属性依赖,该属性可以不使用public 修饰符 |
AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement |
代码举例 :
@Controller
public class HomeController {
// 情况 1
ServletRequest constructorRequest;
//// 注意这是一个构造函数,其参数 request 上没有使用任何注解
public HomeController(ServletRequest request) {
constructorRequest = request;
}
// 情况2
//// 注意该属性上没有使用任何注解,该属性通过 setRequest 设置
ServletRequest methodRequest;
@Autowired
public void setRequest(ServletRequest request) {
this.methodRequest = request;
}
// 情况3
@Value("${city}")
String city;
// 情况4
@Autowired
ServletRequest fieldRequest;
// 其他代码省略
// ...
}
参考文章
Spring BeanPostProcessor : AutowiredAnnotationBeanPostProcessor