Ioc容器refresh总结(3)--- Spring源码从入门到精通(三十三)

上篇文章介绍了,调用bean工厂的后置处理器,主要分为两步:

他是在beanFactory预准备标准初始化之后执行invokBeanFactoryPostProcessor;先调用beanDefinitionRegistryPostProcessor,在调用beanFactoryPostProcessor,里面都有借口优先级。

Ioc容器refresh总结(2)--- Spring源码从入门到精通(三十二)

六、registerBeanPostProcessor(beanFactory)

注册bean的后置处理器,beanPostProcessor作用:拦截bean的创建过程,在bean初始化前后调用。Intercept bean creator。

实现beanPostProcessor的接口有:

1、DestructionAwareBeanPostProcessor,其中postProcessorBeforeDestruction容器销毁前调用的后置处理,可以destory-method指定和@PreDestory。其中对应的@PostConstrut和init-method方法是在对象初始化之前调用(也就是对象创建构造器之后调用)。

2、InstantiationAwareBeanPostProcessor类,在对象初始化前后调用,分别调用postProcessorBeforeInitialization和postProcessorAfterInitialization,及其用后置处理器postProcessPropertyValues赋值完成之后,运用解析@Autowired和@Value。

3、SmartInstantiationAwareBeanPostProcessor类,用determineCandidateConstructors推断使用啥构造函数之前,和调用getEarlyBeanReference提早获取bean,解决循环依赖,提早创建代理类。

4、MergedBeanDefinitionPostProcessor类,在预处理@autowired@Value调用postProcessorMergeBeanDefinition。

不同后置处理器的bean创建的执行时机是不一样的。

  1. 从beanFactory获取所有BeanPostProcessor类型的;后置处理器都有优先级,通过这两个接口PriorityOrdered ,Ordered指定。
  2. 优先注册PriorityOrdered接口的beanPostProcessor。

把每一个BeanPostProcessor,用addBeanPostProcessor方法添加到beanFactory的BeanPostProcessor中。

  1. 再注册Ordered接口的beanPostProcessor。

  1. 第三步注册没有实现任何接口的beanPostProcessor。
  2. 最终注册mergedBeanDefinitionPostProcessor
  3. 注册一个applicationListenerDetector;bean创建完成之后,检测是否是 ApplicaitionListerner,是的话放在applicationContext容器中保存起来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后端从入门到精通

你的鼓励是我最大的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值