《Spring設計思想》17-bean初始化最後階段applyBeanPostProcessorsAfterInitialization

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章