Spring IoC之BeanPostProcessor

  • BeanPostProcessors以及被其引用的bean与普通的bean不一样,在ApplicationContext容器启动阶段的时候就初始化了;
  • 所有的BeanPostProcessors按顺序注册到容器中,然后会应用到容器中后面所有加载的bean;
  • 因为AOP代理是通过BeanPostProcessor实现了,所以BeanPostProcessor以及被其引用的bean中不会自动织入代理。2.8.1、使用BeanPostProcessor自定义beans

重点看AbstractApplicationContext的refresh方法的这两步:

image-20191118234353717

image-20191118234403487

1、注册Bean的后置处理器

这些处理器在 bean创建的过程中被调用。

这一步实例化并且注册所有的BeanPostProcessor beans,必须在任何bean实例化之前调用。

这一步从解析到的BeanDefinition中找到BeanPostProcessor,通过BeanFactory的getBean方法触发实例化BeanPostProcessor,最终赋值给AbstractBeanFactorybeanPostProcessors属性。

2、实例化剩下的所有的(non-lazy-init) singletons

调用getBean(beanName)触发bean的实例化。如果bean实现了SmartInitializingSingleton接口,则会执行该接口的afterSingletonsInstantiated方法。

后置处理器也是在这一步里面触发执行的。

arthinking wechat
欢迎关注itzhai公众号