1、 @Autowire 定义

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {boolean required() default true;
}

@Autowire 注解是由 AutowiredAnnotationBeanPostProcessor 处理器来实现的。然后我们发现 AutowiredAnnotationBeanPostProcessor 实现了 MergedBeanDefinitionPostProcessor 接口中的 postProcessMergedBeanDefinition()方法。@Autowired注解正是通过这个方法实现注入类型的预解析,将需要依赖注入的属性信息封装到InjectionMetadata类中。,InjectionMetadata类中包含了需要注入的元素(injectedElements)及元素要注入的目标类(tagetClass)。

现在我们知道了AutowiredAnnotationBeanPostProcessor时Autowire的主力,那其又是如何完成依赖注入的呢?其实在Spring容器启动的时候其会调用AbstractApplicationContext类的refresh方法,其主要靠registerBeanPostProcessors()方法完成对AutowiredAnnotationBeanPostProcessor的注册,然后在finishBeanFactoryInitialization(beanFactory)方法对非延迟初始化的单例bean进行初始化时,会执行到AbstractAutowireCapableBeanFactory类的doCreateBean方法。

在doCreateBean()方法中其会调用applyMergedBeanDefinitionPostProcessors这时就会对AutowiredAnnotationBeanPostProcessor类中这个方法完成注入元素注解的预解析

然后其最终会调用doCreateBean方法中,其中会执行populateBean方法实现对属性的注入。

populateBean()方法,会遍历InstantiationAwareBeanPostProcessor,执行实例类的postProcessPropertyValues方法。

然后最终使用反射赋值。

Spring @Autowire 源码分析相关推荐

  1. Spring Cloud源码分析(二)Ribbon(续)

    因文章长度限制,故分为两篇.上一篇:<Spring Cloud源码分析(二)Ribbon> 负载均衡策略 通过上一篇对Ribbon的源码解读,我们已经对Ribbon实现的负载均衡器以及其中 ...

  2. Spring AOP 源码分析 - 拦截器链的执行过程

    1.简介 本篇文章是 AOP 源码分析系列文章的最后一篇文章,在前面的两篇文章中,我分别介绍了 Spring AOP 是如何为目标 bean 筛选合适的通知器,以及如何创建代理对象的过程.现在我们的得 ...

  3. Spring AOP 源码分析 - 创建代理对象

    1.简介 在上一篇文章中,我分析了 Spring 是如何为目标 bean 筛选合适的通知器的.现在通知器选好了,接下来就要通过代理的方式将通知器(Advisor)所持有的通知(Advice)织入到 b ...

  4. Spring AOP 源码分析 - 筛选合适的通知器

    1.简介 从本篇文章开始,我将会对 Spring AOP 部分的源码进行分析.本文是 Spring AOP 源码分析系列文章的第二篇,本文主要分析 Spring AOP 是如何为目标 bean 筛选出 ...

  5. spring AOP源码分析(一)

    spring AOP源码分析(一) 对于springAOP的源码分析,我打算分三部分来讲解:1.配置文件的解析,解析为BeanDefination和其他信息然后注册到BeanFactory中:2.为目 ...

  6. 一步一步手绘Spring AOP运行时序图(Spring AOP 源码分析)

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...

  7. 精尽Spring Boot源码分析 - 内嵌Tomcat容器的实现

    概述 我们知道 Spring Boot 能够创建独立的 Spring 应用,内部嵌入 Tomcat 容器(Jetty.Undertow),让我们的 jar 无需放入 Servlet 容器就能直接运行. ...

  8. 【Spring】Spring AOP源码分析-导读(一)

    文章目录 1.简介 2.AOP 原理 3.AOP 术语及相应的实现 3.1 连接点 - Joinpoint 3.2 切点 - Pointcut 3.3 通知 - Advice 3.4 切面 - Asp ...

  9. 视频教程-Spring底层源码分析-Java

    Spring底层源码分析 鲁班学院-子路老师曾就职于谷歌.天猫电商等多家互联网公司,历任java架构师.研发经理等职位,参与并主导千万级并发电商网站与后端供应链研发体系搭建,多次参与电商大促活动技术保 ...

最新文章

  1. 使用三目运算嵌套方法 或 临时变量方法: 获取三个整数中最大值的数
  2. linux C 应用消息队列在两个进程间通信
  3. linux 非阻塞 socket - Google 搜索
  4. 猜物品游戏java编程_小猿圈Java初学者练习小案例:猜数字游戏
  5. Unicode和UTF-8之间的转换详解
  6. swift学习第四章
  7. 一步一步理解拖拽Drag(四)
  8. 使用python的matplotlib模块对netflow的流量信息分析(饼图)
  9. 如何提高python代码运行速度_一行代码让你的python运行速度提高100倍
  10. Atitit 微服务之道 attilax著 1. 什么是微服务架构? 1 1.1. 、微服务与SOA的关系 :微服务架架构师面向服务架构(SOA)的一种特定实现 2 1.2. 微服务与康威定律 2 1
  11. pdf pmp书籍第六版_PMP项目管理 第六版 (带目录完整高清版).pdf
  12. 浅析redis雪崩击穿和穿透
  13. Unity打包后播放视频黑屏问题
  14. 什么是CAS和AQS
  15. CISCO PACKET TRACER 实验:以太网连接Internet
  16. 教你在M1芯片的imac一体机上安装PS2021 附教程和方法适用于所有Mac
  17. 大数据项目实训总结_大数据实习报告.doc
  18. 当渠道需要在Application中调用有参方法
  19. fast角点与ShiTomas角点速度对比
  20. 内存与主板不兼容导致不定时蓝屏,查看日志

热门文章

  1. 计算机行业英语单词(一)
  2. MySQL数据库常见的题目类型训练
  3. 怎么把字母缩小当符号_怎么快速入门学电子电路?老电工:这2条是必经之路,早学早入门!...
  4. 《计算机是怎样跑起来的》小结
  5. Android端基于MTCNN和mobilefacenet的人脸识别
  6. js 鼠标按下并移动事件
  7. 《伤寒杂病论》序——张仲景
  8. SpringBoot项目启动报错,java.lang.IllegalStateException: Ambiguous mapping.访问路径模棱两可,无法映射的问题!!!
  9. android网络请求撤销,Android OkHttp + Retrofit 取消请求的方法
  10. 黑马学ElasticSearch(五)