出门莫恨无人随,书中车马多如簇。这篇文章主要讲述#yyds干货盘点#Spring 源码阅读Spring IoCAOP 原理小总结相关的知识,希望能为你提供帮助。
@[TOC](Spring IoC、AOP 原理小总结)
前言Spring 框架提供了两大功能: IoC 和 AOP,它能对 bean 的全生命周期进行管理。
其它框架如果能被纳入到 Spring 容器的管理的话,那么这个框架的 bean 也就具备了 IoC 和 AOP 的能力。
所以,其他框架与 Spring 整合的过程,可以理解为"
将其他框架纳入到 Spring 容器中来管理"
的过程。
前面的文章已经透过源码分析过了 IoC 和 AOP,这里,再对 Spring 框架来进行一个小小的总结。
版本约定Spring 5.3.9 (通过 SpringBoot 2.5.3 间接引入的依赖)
正文Spring 框架为了实现 IoC 的功能,引入了 Spring BeanFactory 容器的概念(即:Spring IoC 容器)。
Spring 框架要处理的主要功能可以概括为 3 块:
- BeanFactory 容器的初始化
- IoC 的过程
2.1 bean 实例的创建
2.2 bean 依赖的注入 - AOP 的过程
3.1 找到所有与 bean 匹配的 Advisor
3.2 通过 Advisor 创建 AOP 代理类
Spring BeanFactory 容器初始化过程我们讲 Spring 容器,通常都是说的 Spring 的 bean 容器,也就是 BeanFactory(
org.springframework.beans.factory.BeanFactory
)。BeanFactory 的初始化主要是通过
AbstractApplicationContext#refresh()
来完成的,主要过程如下:AbstractApplicationContext#refresh()
文章图片
IoC 的过程IoC 是" 控制反转" 和 " 依赖注入" 功能的总称。
BeanFactory 初始化流程中
finishBeanFactoryInitialization()
会触发所有非 lazy bean 的加载。也就是会进行 bean 实例的创建 和 依赖关系的注入。bean 的创建过程过程主要可分为三步:
- 创建 bean 的实例: createBeanInstance
- 填充 bean 的依赖: populateBean
- 初始化 bean: initializeBean
文章图片
AOP 的过程Spring 中通过 Pointcut 来将 bean 中的 join point 与 Advisor 进行匹配。
AOP 动态代理类的创建是在 bean 的创建过程的第三步
initializeBean
时,通过 AnnotationAwareAspectJAutoProxyCreator#postProcessAfterInitialization()
来创建的。AnnotationAwareAspectJAutoProxyCreator
在 Spring 中,AOP 代理类是放在
BeanPostProcessor
这个扩展点中来处理的。具体是通过 AnnotationAwareAspectJAutoProxyCreator#postProcessAfterInitialization
来实现的。AnnotationAwareAspectJAutoProxyCreator 的类图如下:
创建 AOP 代理类的主要功能是由
AbstractAutoProxyCreator
来完成的。文章图片
AbstractAutoProxyCreator:
它是 BeanPostProcessor 的实现类,它会获取到所有与 bean 相匹配的 advisor,用于创建 AOP 代理类。
AnnotationAwareAspectJAutoProxyCreator:
它继承了 AbstractAutoProxyCreator,它能从 application context 中获取所有 AspectJ 注解形式的 advisor 用于创建 AOP 代理类。
AOP 代理的创建过程
文章图片
在创建 AOP 代理类之前,需要提前将所有的 Advisor 都找出来,然后,在创建代理类时,再通过 AspectJ 表达式去匹配与当前 bean 相关的 Advisor。
Advice 执行的过程
Spring AOP 代理类的实现有两种:JDK proxy 或者是 CGLIB proxy。
执行 AOP 代理类的 Advice 时,都会经过两步:
- 获取 method 对应的 advice chain
- 执行 advice chain 及 join point(目标方法)
文章图片
小结Spring 框架提供了 IoC 和 AOP 两大功能,它能对 bean 的全生命周期进行管理。
Spring 框架的主要功能可以概括为 3 块:
- BeanFactory 容器的初始化
- IoC 的过程
2.1 bean 实例的创建
2.2 bean 依赖的注入 - AOP 的过程
3.1 找到所有与 bean 匹配的 Advisor
3.2 通过 Advisor 创建 AOP 代理类
当项目启动报错时,也能结合源码的知识快速定位出原因。
如果本文对你有所帮助,欢迎点赞收藏!
有关 Spring 源码方面的问题欢迎留言一起交流...
公众号后台回复:下载IoC 或者 下载AOP 可以免费下载源码测试工程…
阅读更多文章,请关注公众号: 老王学源码
文章图片
博主好课推荐:
课程 | 地址 |
---|---|
Dubbo源码解读——通向高手之路 | https://edu.51cto.com/sd/2e565 |
正则表达式基础与提升 | https://edu.51cto.com/sd/59587 |
推荐阅读
- #yyds干货盘点#跨域问题之Spring的跨域的方案
- Flutter 专题66 图解基本约束 Box#yyds干货盘点#
- Redis哨兵集群主库故障数据恢复思路 #yyds干货盘点#
- Flutter 专题65 图解基本 TextField 文本输入框#yyds干货盘点#
- 容器管理工具docker和容器的规范与依赖
- 带你全面扫盲!
- au3+zabbix打造轻量级计算机安全告警系统(序)
- Effective Java - 静态方法与构造器
- Win10开发者SDK首个浏览版改进的电话与消息应用