spring源码深入解析bean的依赖注入DI到底如何完成--即分析 AutowiredAnnotationBeanPost 和CommonAnnotationBeanPostProcessor(二)

此篇结合上一篇,这里单独分析 @autowired @resouce 注解 所支持的字段及方法注入的过程到底如何进行的,即从他们注解是合适解析,合适开始依赖注入分析

(因为@resouce 注解的特殊性,建议先看我之前的一篇博文,分析过他被 @resouce使用的字段对应 字段信息会被放入 CommonAnnotationBeanPostProcessor 所维护的一个 缓存里,这里我就猜测到它的类似分析找到 @Autowired 注解的解析 肯定是放到了 AutowiredAnnotationBeanPost里面所定义的一个属性 map 缓存上面,并且也应该是在 目标bean 的实例化后,属性设置前 即 【apply_Merged_BeanDefinitionPostProcessors】利用 合并后置处理器接口方法调用到 AutowiredAnnotationBeanPost 他的postProcessMergedBeanDefinition逻辑完成注解(方法,字段)解析放到了其和父类的缓存map里面,具体使用在下面)
在这里插入图片描述

首先,我先梳理一遍依赖注入的多种情况方式(都用注解哈)

  1. 我角度需要除开构造器注入哈,构造器注入我举得非常特殊,因为它不是在 属性设置pupulate 阶段,并且 有参构造的方法 上面是不需要加@Autowired 注解的,很多人都在上面加,其实没有意义的,为啥说呢,–>
    ( 1. 在通过构造器注入的方式实例化目标bean过程里面至始至终也没有看到有用到 注解@Autowired ,因为也不可能用到的嘛,
    2.因为@autowired 注解是在 目标bean被实例化后,属性设置pupulateBean 之前 才开始 完成解析 到的!)

2.pupulate 阶段 的发生的依赖注入

这种不是通过构造器注入的方式,即都是实现了目标bean的无参构造实例之后,属性设置阶段完成对目标bean的属性的解析注入。

又可以按 分为2类,都是需要加 注解@Autowired 或者 @resouce ,
第 1 类:直接注解放到字段上面 – 也叫 字段注入
第 2 类:直接注解放到方法上面 – 也叫 method --setter 注入

发布了43 篇原创文章 · 获赞 14 · 访问量 3565

猜你喜欢

转载自blog.csdn.net/qq_39965727/article/details/104680012