我是靠谱客的博主 谨慎心情,最近开发中收集的这篇文章主要介绍Spring依赖注入主流程1.手动依赖注入2.XML形式的自动注入3.@Autowired自动注入原理4.@Autowired流程5.@Resource流程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

笔记大纲

  • 1.手动依赖注入
  • 2.XML形式的自动注入
  • 3.@Autowired自动注入原理
    • 3.1 @Autowired特点
    • 3.2 寻找注入点(postProcessor机制实现)
    • 3.3 注入
      • 3.3.1 属性注入
      • 3.3.2 set注入
  • 4.@Autowired流程
  • 5.@Resource流程

1.手动依赖注入

在XML配置的形式下,在标签中可以手动注入属性的ref引用关系或者指定构造的注入,称之为手动注入的形式(set注入、构造注入)。

2.XML形式的自动注入

在标签中可以配置autowire的自动注入方式是byType还是byName还是构造等,在创建Bean的过程中Spring将这个类的所有方法解析出来通过一定的规则进行筛选(例如set方法)然后进行属性注入。

3.@Autowired自动注入原理

3.1 @Autowired特点

它是byType和byName的结合,注解可以使用在:

        - 属性:优先byType寻找,如果存在多个则再根据名字查找。
        - 构造:优先根据方法参数类型byType寻找,如果存在多个则再根据名字查找。
        - set方法:优先根据方法参数类型byType寻找,如果存在多个则再根据名字查找。

3.2 寻找注入点(postProcessor机制实现)

在Bean的实例化阶段时,Spring利用AutowiredAnnotationBeanPostProcessor拓展机制调用#postProcessMergedBeanDefinition()方法来对Autowired注解的注入点寻找。寻找的流程大致为:

     1. 遍历当前Bean类的所有字段属性。
     1. 检查这个属性上是否加了`@Autowired、@Value、@Inject`的其中任意一个注解,如果有,则认为这是一个注入点。
     1. 判断字段是否是static静态修饰的,如果是,则跳过,不进行注入。
     1. 获取Autowired注解中的required属性值(这个值代表注入是否可以非null,默认是false)。
     1. 将这个属性字段封装成一个`AutowiredFiledElement`对象,放入Elements集合中。
     1. 开始这个Bean类的所有方法遍历。
     1. 检查这个方法上是否加了`@Autowired、@Value、@Inject`的其中任意一个注解,如果有,则认为这是一个注入点。
     1. 如果方法时静态方法,则跳过,不视为注入点。
     1. 获取Autowired注解中的required属性值(这个值代表注入是否可以非null,默认是false)。
     1. 将这个方法封装成一个`AutowiredFiledElement`对象,放入Elements集合中。
     1. 返回这个注入点集合。

3.3 注入

Spring基于AutowiredAnnotationBeanPostProcessor#postProcessProperties()方法中,遍历所有的注入点,然后依次注入调用。

3.3.1 属性注入

从BeanFactory容器中调用resolveDependency方法,进行Bean对象的查找,通过反射进行值的注入。

3.3.2 set注入

和属性注入一样,从BeanFactory中寻找并通过反射invoke,让对象调用方法执行注入。

4.@Autowired流程

在这里插入图片描述

5.@Resource流程

在这里插入图片描述

最后

以上就是谨慎心情为你收集整理的Spring依赖注入主流程1.手动依赖注入2.XML形式的自动注入3.@Autowired自动注入原理4.@Autowired流程5.@Resource流程的全部内容,希望文章能够帮你解决Spring依赖注入主流程1.手动依赖注入2.XML形式的自动注入3.@Autowired自动注入原理4.@Autowired流程5.@Resource流程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部