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 @ 2022-03-30 17:03  原来是晴天啊  阅读(346)  评论(0)    收藏  举报