上面幾節內容總結了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的測試用例跟上一節一樣,大家可以參考