- BeanPostProcessors以及被其引用的bean与普通的bean不一样,在ApplicationContext容器启动阶段的时候就初始化了;
- 所有的BeanPostProcessors按顺序注册到容器中,然后会应用到容器中后面所有加载的bean;
- 因为AOP代理是通过BeanPostProcessor实现了,所以BeanPostProcessor以及被其引用的bean中不会自动织入代理。2.8.1、使用BeanPostProcessor自定义beans
重点看AbstractApplicationContext的refresh方法的这两步:
1、注册Bean的后置处理器
这些处理器在 bean创建的过程中被调用。
这一步实例化并且注册所有的BeanPostProcessor beans
,必须在任何bean实例化之前调用。
这一步从解析到的BeanDefinition中找到BeanPostProcessor
,通过BeanFactory的getBean方法触发实例化BeanPostProcessor
,最终赋值给AbstractBeanFactory
的beanPostProcessors
属性。
2、实例化剩下的所有的(non-lazy-init) singletons
调用getBean(beanName)触发bean的实例化。如果bean实现了SmartInitializingSingleton接口,则会执行该接口的afterSingletonsInstantiated方法。
后置处理器也是在这一步里面触发执行的。