Spring源码-bean工厂后置处理器和bean的后置处理器
代码
@Configuration
public class AppConfig {
@Bean
public Bean1 bean1() {
return new Bean1();
}
@Bean
public Bean2 bean2() {
return new Bean2();
}
}
@Component
public class Bean1 {
@Autowired
private Bean2 bean2;
}
beanFactory 中注册bean
- 通过工厂的后置处理器向注册的bean 添加元素,例如:将Bean1 , Bean2 添加到工厂(bean Factory 后置处理器主要功能:补充一些bean的定义,即扫描bean上的注解@Configuration等并且添加到容器里)
- 通过bean 后置处理器,针对bean生命周期的各个阶段进行拓展,例如 @Autowired @Resource(默认延迟实例化初始化 即懒汉加载),解析不同的注解需要不同的处理器,并且会有执行顺序
beanFactory:
不会主动调用BeanFactory的后置处理
不会主动添加Bean后置处理器
不会主动初始化单例对象
不会解析beanFactory ${} #{}
bean的后置处理器有排序逻辑。例如同时添加了 @Autowired @Resource注解
bean:构造--> 依赖注入 --> 初始化 --> 销毁
bean后置处理器 AutowiredAnnotationBeanPostProcessor
实现属性注入的方法
通过 findAutowiringMetadata 找到需要Autowired的属性或者方法 将其封装成 metadata ,通过反射 进行属性注入
bean工厂后置处理器
1、ConfigurationClassPostProcessor : 解析 componentScan , Bean , Import ,ImportResource
2、MapperScannerConfigurer : 解析MyBatis的Mapper
context.refresh 容器,初始化单例对象
1.找到bean工厂后置处理器 执行 准备beanDefinition
2.添加bean后置处理器
3.初始化单例
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?