Spring IoC之BeanPostProcessor

发布于 2019-11-26 | 更新于 2021-12-05
  • 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

本文链接: https://www.itzhai.com/articles/spring-ioc-bean-post-processor.html

版权声明: 版权归作者所有,未经许可不得转载,侵权必究!联系作者请加公众号。

×
IT宅

关注公众号及时获取网站内容更新。