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.初始化单例
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号