不甘于配角!AutowiredAnnotationBeanPostProcessor 助力 Bean 注解注入
2024-01-14 03:19:02
前言
大家好,欢迎来到 Spring 源码阅读系列文章的第 42 篇。在上一篇博客中,我们深入研究了 AutowiredAnnotationBeanPostProcessor 中 postProcessProperties 方法的第一部分,对 BeanDefinition 中添加了注入注解的属性进行了自动装配。
今天,我们将继续对 postProcessProperties 方法的剩余部分进行分析,了解它是如何对 BeanDefinition 中添加了注入注解的方法进行自动装配的。
注入注解的方法
在 Spring 中,除了可以通过属性进行注入外,还可以通过方法进行注入。要对方法进行注入,需要在方法上添加 @Autowired 注解。
例如,我们有一个 UserService 类,它有一个方法叫做 setUserDao,这个方法接收一个 UserDao 类型的参数,并使用 @Autowired 注解进行注入。
public class UserService {
private UserDao userDao;
@Autowired
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}
当 Spring 在实例化 UserService Bean 时,AutowiredAnnotationBeanPostProcessor 会自动检测到 setUserDao 方法上添加了 @Autowired 注解,并对其进行注入。
postProcessProperties 方法对方法的注入处理
AutowiredAnnotationBeanPostProcessor 在 postProcessProperties 方法中对方法的注入处理主要分为以下几步:
- 首先,它会遍历 BeanDefinition 中的所有方法,并找出添加了 @Autowired 注解的方法。
- 然后,它会为每个添加了 @Autowired 注解的方法创建一个 MethodParameter 对象,并将其添加到一个 List 中。
- 最后,它会遍历 MethodParameter List,并对每个 MethodParameter 对象进行注入。
注入方法的具体实现
AutowiredAnnotationBeanPostProcessor 在注入方法时,会先根据 MethodParameter 对象获取方法的参数类型,然后根据参数类型在 Spring IoC 容器中查找相应的 Bean。
如果找到相应的 Bean,则会将该 Bean 注入到方法中。如果找不到相应的 Bean,则会抛出异常。
注入方法的注意事项
在使用方法注入时,需要注意以下几点:
- 方法必须是 public 的。
- 方法只能有一个参数。
- 参数类型必须是 Spring IoC 容器中管理的 Bean。
- 方法不能是 static 的。
总结
在今天的文章中,我们对 AutowiredAnnotationBeanPostProcessor 中 postProcessProperties 方法对 BeanDefinition 中添加了注入注解的方法进行注入的过程进行了分析。
通过本篇文章,我们对 Spring 的自动装配机制有了更深入的了解。
希望大家能够有所收获。