《Spring设计思想》17-bean初始化最后阶段applyBeanPostProcessorsAfterInitialization

    技术2022-07-13  66

    上面几节内容总结了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的测试用例跟上一节一样,大家可以参考

     

    Processed: 0.018, SQL: 10