BeanFactoryPostProcessor 接口
对象实例化之前
1.实现 BeanDefinitionRegistryPostProcessor接口
2.实现 BeanFactoryPostProcessor 接口
BeanPostProcessor接口
创建时还没创建,返回代理对象
3.实现InstantiationAwareBeanPostProcessor接口 (AOP原理SmartInstantiationAwareBeanPostProcessor,BeanFactoryAware)
beanInstance = this.resolveBeforeInstantiation(beanName, mbdToUse);
bean = this.applyBeanPostProcessorsBeforeInstantiation(targetType, beanName);
if (bean != null) {
bean = this.applyBeanPostProcessorsAfterInitialization(bean, beanName);
}
对象刚创建doCreateBean()中
4.实现MergedBeanDefinitionPostProcessor接口
this.applyMergedBeanDefinitionPostProcessors(mbd, beanType, beanName);
bdp.postProcessMergedBeanDefinition(mbd, beanType, beanName);
populateBean注入属性之前
实现InstantiationAwareBeanPostProcessor接口
ibp.postProcessAfterInstantiation(bw.getWrappedInstance(), beanName)
实现InstantiationAwareBeanPostProcessor接口
ibp.postProcessPropertyValues((PropertyValues)pvs, filteredPds, bw.getWrappedInstance(), beanName))
populateBean注入属性之后
5..实现BeanPostProcessor接口
初始化之前调用wrappedBean = this.applyBeanPostProcessorsBeforeInitialization(bean, beanName);
初始化之后【执行Aware接口方法】invokeAwareMethods(beanName, bean);执行xxxAware接口的方法
BeanNameAware\BeanClassLoaderAware\BeanFactoryAware等
初始化之后调用wrappedBean = this.applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);
bean创建完成最后一步
preInstantiateSingletons()中
smartSingleton.afterSingletonsInstantiated();
6.实现SmartInitializingSingleton接口(@EventListener监听器原理)
ApplicationListener接口
7.实现ApplicationListener接口
finishRefresh()中调用发布事件(有线程池异步调用)