在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
Spring 依赖解决过程分析
Spring bean 构造函数参数依赖注入分析
本文深入解析Spring框架中bean依赖注入的四种主要方式:构造函数参数、使用@Autowired注解的成员函数参数、使用@Value注解的成员属性以及使用@Autowired注解的成员属性。通过实例代码展示了不同依赖注入形式的应用场景及其实现细节。
1170

被折叠的 条评论
为什么被折叠?



