上面几节内容总结了initializeBean方法中的前三步,第一步:invokeAwareMethods
第二步:applyBeanPostProcessorsBeforeInitialization
第三步:invokeInitMethods
这节简单的描述下第四步 applyBeanPostProcessorsAfterInitialization方法
跟第二步方法差不多
@Override public Object applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName) throws BeansException { Object result = existingBean; for (BeanPostProcessor processor : getBeanPostProcessors()) { Object current = processor.postProcessAfterInitialization(result, beanName); if (current == null) { return result; } result = current; } return result; }也是调用beanFactory的BeanPostProcessors的postProcessAfterInitialization方法,
简单的实例:
public class BeanInitializationDemo implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { if(bean instanceof UserHolder){ UserHolder userHolder = (UserHolder) bean; System.out.println("初始化前调用 PostProcessorBeforeInitialiation"); userHolder.setDescript("我经历过了postProcessBeforeInitialization"); } return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { if(bean instanceof UserHolder){ UserHolder userHolder = (UserHolder) bean; System.out.println("初始化后调用 postProcessorAfterInitialiation"); userHolder.setDescript("我经历过了postProcessorAfterInitialiation"); } return bean; } }实现了postProcessAfterInitialization方法
手动添加到beanFactory
输出:
applicationContext的测试用例跟上一节一样,大家可以参考