BeanPostProcessor 原理及源码分析

BeanPostProcessor:bean后置处理器,bean创建对象初始化前后进行拦截工作
 * 	1)、BeanFactoryPostProfessor:beanFactory后置处理器
 *BeanFactory标准初始化之后调用,来定制和修改BeanFactory的内容
 * 			所有的bean定义已经保存加载到beanFactory,但是bean的实例还未创建
 * 			在实例化bean时,是先往容器中添加bean定义,但是都未实例化
 *  	1.创建i o c容器
 * 		2.invokeBeanFactoryPostProcessors(beanFactory);执行BeanFactoryPostProcessor
 * 			如何找到所有的BeanFactoryPostProcessor并执行他们的方法;
 * 				1.直接在BeanFactory中找到所有类型是BeanFactoryPostProcessor的组件,并执行他们的方法;(这个BeanFactory是以后的ioc容器)
 * 				2.在初始化创建其他组件之前执行
 * 	2)、BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor
 * 			postProcessBeanDefinitionRegistry()
 * 			在所有bean定义将要加载,bean实例还未创建的时候执行;
 * 			
 * 			优于BeanFactoryPostProcessor执行;
 * 			利于BeanDefinitionRegistryPostProcessor给容器中添加额外的组件
 * 
 * 
 * 	原理:
 * 		1.创建ioc容器
 * 		2.refresh()==>invokeBeanFactoryPostProcessors(beanFactory)
 * 		3.先从容器中获取BeanDefinitionRegistryPostProcessor类型的组件,同时也会通过过滤获取到BeanFactoryPostProcessor组件
 * 		  	1. 先依次触发postProcessBeanDefinitionRegistry()方法【BeanDefinitionRegistryPostProcessor* 				currentRegistryProcessors.add(beanFactory.getBean(ppName, BeanDefinitionRegistryPostProcessor.class));
 * 				同时还通过调用getBean(),依次往容器中注入实例化的bean【BeanDefinitionRegistryPostProcessor* 				根据优先级,依次触发postProcessBeanDefinitionRegistry()* 		  	2. 再来依次触发postProcessBeanFactory()方法【BeanFactoryPostProcessor* 		4.再来从容器中找	BeanFactoryPostProcessor的组件,依次触发postProcessBeanFactory()方法(在执行完postProcessBeanDefinitionRegistry之后就开始了)
 * 			同时还依次往容器中注入实例化的bean【BeanFactoryPostProcessor* 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值