applyBeanPostProcessorsAfterInitialization就是在bean初始化之后,执行的方法。
public Object applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName) throws BeansException {
Object result = existingBean;
//获取所有的BeanPostProcessors进行遍历
Iterator i$ = this.getBeanPostProcessors().iterator();
do {
if (!i$.hasNext()) {
return result;
}
BeanPostProcessor beanProcessor = (BeanPostProcessor)i$.next();
//调用beanProcessor的postProcessAfterInitialization方法
result = beanProcessor.postProcessAfterInitialization(result, beanName);
} while(result != null);
return result;
}
分析:
spring源码04——AbstractApplicationContext.registerBeanPostProcessors
在上面的方法过程中,我们创建了AbstractAutoProxyCreator,这个对象实现了beanProcessor,所以:
result = beanProcessor.postProcessAfterInitialization(result, beanName);
实际调用的就是:
AbstractAutoProxyCreator.postProcessAfterInitialization(Object bean, String beanName);
spring源码10——AbstractAutoProxyCreator.postProcessAfterInitialization