Spring @Autowire 源码分析
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 源码分析相关推荐
- Spring Cloud源码分析(二)Ribbon(续)
因文章长度限制,故分为两篇.上一篇:<Spring Cloud源码分析(二)Ribbon> 负载均衡策略 通过上一篇对Ribbon的源码解读,我们已经对Ribbon实现的负载均衡器以及其中 ...
- Spring AOP 源码分析 - 拦截器链的执行过程
1.简介 本篇文章是 AOP 源码分析系列文章的最后一篇文章,在前面的两篇文章中,我分别介绍了 Spring AOP 是如何为目标 bean 筛选合适的通知器,以及如何创建代理对象的过程.现在我们的得 ...
- Spring AOP 源码分析 - 创建代理对象
1.简介 在上一篇文章中,我分析了 Spring 是如何为目标 bean 筛选合适的通知器的.现在通知器选好了,接下来就要通过代理的方式将通知器(Advisor)所持有的通知(Advice)织入到 b ...
- Spring AOP 源码分析 - 筛选合适的通知器
1.简介 从本篇文章开始,我将会对 Spring AOP 部分的源码进行分析.本文是 Spring AOP 源码分析系列文章的第二篇,本文主要分析 Spring AOP 是如何为目标 bean 筛选出 ...
- spring AOP源码分析(一)
spring AOP源码分析(一) 对于springAOP的源码分析,我打算分三部分来讲解:1.配置文件的解析,解析为BeanDefination和其他信息然后注册到BeanFactory中:2.为目 ...
- 一步一步手绘Spring AOP运行时序图(Spring AOP 源码分析)
相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...
- 精尽Spring Boot源码分析 - 内嵌Tomcat容器的实现
概述 我们知道 Spring Boot 能够创建独立的 Spring 应用,内部嵌入 Tomcat 容器(Jetty.Undertow),让我们的 jar 无需放入 Servlet 容器就能直接运行. ...
- 【Spring】Spring AOP源码分析-导读(一)
文章目录 1.简介 2.AOP 原理 3.AOP 术语及相应的实现 3.1 连接点 - Joinpoint 3.2 切点 - Pointcut 3.3 通知 - Advice 3.4 切面 - Asp ...
- 视频教程-Spring底层源码分析-Java
Spring底层源码分析 鲁班学院-子路老师曾就职于谷歌.天猫电商等多家互联网公司,历任java架构师.研发经理等职位,参与并主导千万级并发电商网站与后端供应链研发体系搭建,多次参与电商大促活动技术保 ...
最新文章
- 使用三目运算嵌套方法 或 临时变量方法: 获取三个整数中最大值的数
- linux C 应用消息队列在两个进程间通信
- linux 非阻塞 socket - Google 搜索
- 猜物品游戏java编程_小猿圈Java初学者练习小案例:猜数字游戏
- Unicode和UTF-8之间的转换详解
- swift学习第四章
- 一步一步理解拖拽Drag(四)
- 使用python的matplotlib模块对netflow的流量信息分析(饼图)
- 如何提高python代码运行速度_一行代码让你的python运行速度提高100倍
- Atitit 微服务之道 attilax著 1. 什么是微服务架构?	1 1.1. 、微服务与SOA的关系 :微服务架架构师面向服务架构(SOA)的一种特定实现	2 1.2. 微服务与康威定律	2 1
- pdf pmp书籍第六版_PMP项目管理 第六版 (带目录完整高清版).pdf
- 浅析redis雪崩击穿和穿透
- Unity打包后播放视频黑屏问题
- 什么是CAS和AQS
- CISCO PACKET TRACER 实验:以太网连接Internet
- 教你在M1芯片的imac一体机上安装PS2021 附教程和方法适用于所有Mac
- 大数据项目实训总结_大数据实习报告.doc
- 当渠道需要在Application中调用有参方法
- fast角点与ShiTomas角点速度对比
- 内存与主板不兼容导致不定时蓝屏,查看日志
热门文章
- 计算机行业英语单词(一)
- MySQL数据库常见的题目类型训练
- 怎么把字母缩小当符号_怎么快速入门学电子电路?老电工:这2条是必经之路,早学早入门!...
- 《计算机是怎样跑起来的》小结
- Android端基于MTCNN和mobilefacenet的人脸识别
- js 鼠标按下并移动事件
- 《伤寒杂病论》序——张仲景
- SpringBoot项目启动报错,java.lang.IllegalStateException: Ambiguous mapping.访问路径模棱两可,无法映射的问题!!!
- android网络请求撤销,Android OkHttp + Retrofit 取消请求的方法
- 黑马学ElasticSearch(五)