spring源码一.(4) BeanPostProcessor的八次执行

1.背景介绍

    BeanPostProcessor它贯穿spring的bean生命周期,可以用来干预bean的实例化,初始化,使其成为一个完整的bean,而不仅仅是一个对象!

2.八次执行流程学习

    2.1.第一次 :给予后置处理器一个提前返回代理对象的机会

    

     2.2 第二次:在实例化对象时,用于推断用哪个构造方法 

     

     2.3 第三次:找出对应的注入点,存到InjectionMetadata对象中去

           注意点2.3.1. InjectionMetadata包含了目标对象对应的class以及要注入的元素

           

           注意点2.3.2. 这些注入点可以理解为 是 要处理的加了@Autowire属性 和 @Resource的属性,分别是用不同的BeanPostprocessor实现子类去找出来的

 2.4 第四次 用于处理spring中的循环依赖

       它是会往(singletonFactories) 二级缓存中储存一个ObjectFactory,要用时,再通过lambda表达式去实例真实的对象

2.5 第五次 populateBean() 判断是否需要进行属性填充 

      

2.6. 第六次 populateBean() 完成对属性的填充

 

注意:如果是自动注入模型的话,spring还会通过java自省来找出合理的属性, 调用applyPropertyValues(beanName, mbd, bw, pvs)来实现找出的属性填充!

2.7 第七次 initializeBean()

      2.7.1. 处理各种aware接口实现类的回调

      2.7.2. 处理@PostConstructor 初始化 方法的回调  (销毁就不举例了)

                处理InitializingBean的 afterPropertiesSet()方法

                处理BeanDefition的 getInitMethodName()方法

2.8. 第八次  initializeBean() 里面正常情况下AOP中的代理对象的产生是在这里完成的

3.阶段总结

    多动手,才能深刻理解!记住骨架图,再去扣细节,可以达到事半功倍!

 

          

               

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值