接着上一篇关于生命周期的介绍,我们继续从源码级别,深入了解bean的全生命周期。这篇文章的切入点是BeanPostProcessor,其中有两个关键的方法,可以说是这个接口贯穿了整个bean生命周期;
-
BeanPostProcessor的使用时机
-
方法postProcessBeforeInitialization是在bean初始化完成前切入;
-
方法postProcessAfterInitialization是在调用bean初始化之后切入;
-
遍历容器可以得到所有的BeanPostPrecessor,然后一个个执行,一旦遇到返回值为null则会跳出遍历接口,不再执行后面的beanpostProcessor
-
BeanPostProcessor的原理
-
1、 populateBean(beanName, mbd, instanceWrapper);给bean进行属性赋值
-
2、initializeBean{ }
-
2.1、applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName);
-
2.2、invokeInitMethods(beanName, wrappedBean, mbd);执行自定义初始化;
-
2.3、applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);
-
BeanPostProcessor在源码底层的应用场景
bean赋值,注入其他组件,@Autowired,生命周期注解功能,@Async等等都应用到了 BeanPostProcessor;尤其是@AutoWired实现过程会在后面的博文中详细介绍,因为它在开发过程中最常用的一个注解,应该没有之一