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

  1. 通过工厂的后置处理器向注册的bean 添加元素,例如:将Bean1 , Bean2 添加到工厂(bean Factory 后置处理器主要功能:补充一些bean的定义,即扫描bean上的注解@Configuration等并且添加到容器里)
  2. 通过bean 后置处理器,针对bean生命周期的各个阶段进行拓展,例如 @Autowired @Resource(默认延迟实例化初始化 即懒汉加载),解析不同的注解需要不同的处理器,并且会有执行顺序

beanFactory:

不会主动调用BeanFactory的后置处理

不会主动添加Bean后置处理器

不会主动初始化单例对象

不会解析beanFactory ${}  #{}

 bean的后置处理器有排序逻辑。例如同时添加了 @Autowired @Resource注解

bean:构造--> 依赖注入 --> 初始化 --> 销毁

bean后置处理器 AutowiredAnnotationBeanPostProcessor

实现属性注入的方法

image

通过 findAutowiringMetadata 找到需要Autowired的属性或者方法 将其封装成 metadata ,通过反射 进行属性注入

image

bean工厂后置处理器

1、ConfigurationClassPostProcessor : 解析 componentScan , Bean , Import ,ImportResource

2、MapperScannerConfigurer : 解析MyBatis的Mapper

context.refresh 容器,初始化单例对象

1.找到bean工厂后置处理器 执行 准备beanDefinition

2.添加bean后置处理器

3.初始化单例

posted @   原来是晴天啊  阅读(319)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示