第二十四章 Spring之源码阅读——AOP篇

Spring源码阅读目录

第一部分——IOC篇

第一章 Spring之最熟悉的陌生人——IOC
第二章 Spring之假如让你来写IOC容器——加载资源篇
第三章 Spring之假如让你来写IOC容器——解析配置文件篇
第四章 Spring之假如让你来写IOC容器——XML配置文件篇
第五章 Spring之假如让你来写IOC容器——BeanFactory和FactoryBean
第六章 Spring之假如让你来写IOC容器——Scope和属性填充
第七章 Spring之假如让你来写IOC容器——属性填充特别篇:SpEL表达式
第八章 Spring之假如让你来写IOC容器——拓展篇
第九章 Spring之源码阅读——环境搭建篇
第十章 Spring之源码阅读——IOC篇

第二部分——AOP篇

第十一章 Spring之不太熟的熟人——AOP
第十二章 Spring之不得不了解的内容——概念篇
第十三章 Spring之假如让你来写AOP——AOP联盟篇
第十四章 Spring之假如让你来写AOP——雏形篇
第十五章 Spring之假如让你来写AOP——Joinpoint(连接点)篇
第十六章 Spring之假如让你来写AOP——Pointcut(切点)篇
第十七章 Spring之假如让你来写AOP——Advice(通知)上篇
第十八章 Spring之假如让你来写AOP——Advice(通知)下篇
第十九章 Spring之假如让你来写AOP——番外篇:Spring早期设计
第二十章 Spring之假如让你来写AOP——Aspect(切面)篇
第二十一章 Spring之假如让你来写AOP——Weaver(织入器)篇
第二十二章 Spring之假如让你来写AOP——Target Object(目标对象)篇
第二十三章 Spring之假如让你来写AOP——融入IOC容器篇
第二十四章 Spring之源码阅读——AOP篇


文章目录

  • Spring源码阅读目录
    • 第一部分——IOC篇
    • 第二部分——AOP篇
  • 前言
  • Joinpoint(连接点)
  • Pointcut(切点)
  • Advice(通知)
  • Aspect(切面)
  • Weaver(织入器)
  • Target Object(目标对象)
  • 融入IOC容器
  • 总结


前言

    对于Spring一直都是既熟悉又陌生,说对它熟悉吧,平时用用没啥问题,但面试的时候被问的一脸懵逼,就很尴尬,都不好意思在简历上写着熟悉Spring了
在这里插入图片描述

    所以决定花点时间研究研究Spring的源码。主要参考的书籍是:《Spring源码深度解析(第2版)》、《Spring揭秘》、《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》


    前边 A君AOP 集成到了 IOC容器 中,Spring 中最基础,也是最重要的两部分内容都整完了。不知道对大家是否有所帮助?不过,这 AOP 部分,A君 换了个写法,之前在写 IOC 篇章的时候,A君 站在完全站在开发者的角度上,去考虑抽象、拓展。而 AOP 篇章,基本上是以 Spring 的视角开展的,一来是怕自己理解有所偏差,胡说八道,误人子弟就不好了,二来也是希望对 AOP 部分有更深入的理解。但这也造成一个问题,这篇文章是否有存在的必要。按理说,能读懂前面 AOP 相关章节,再去看 Spring ,应该是无压力的,这篇文章就没有任何意义了。思来想去,A君 还是决定写下这篇文章,权当折腾这么久的劳动成果吧,也算是对 AOP 进行一个总结

    在研究 AOP 的过程中,A君 曾多次被 Spring 的设计、代码惊艳到了,Spring 能出圈,受到大家的追捧不是没有原因的。好了,废话不多说了,开始我们的源码之旅吧,具体实现、细节部分前面相关章节已经说过,这篇就不重复水字数了,这里让我们把重点放在 UML 图上,了解下 Spring 的设计。

Joinpoint(连接点)

    让我们回到梦开始的地方,从 Joinpoint(连接点) 入手把,其 类图 如下:

在这里插入图片描述

关于 AOP 部分,Spring 也遵循 AOP联盟 规范,大体上,都是在其的基础上做拓展。Joinpoint(连接点) 一如既往的简单,比起一堆抽象类,实现类。Joinpoint(连接点) 简直就是梦中情类,出淤泥而不染。就一个实现类,当然,也有些内部类,这里不在讨论之列。之所以这么简单,主要 Joinpoint(连接点) 也确实没有啥,主要用于保存目标对象、目标方法、已经方法参数,还有个就是负责整个调用链的执行,其他就没它什么事了。啥?你说增强方法有可能用到。不,也用不到,那个用的是 AspectJ 的,一直都是 AspectJ 默默的抗下了所有。这里的 Joinpoint 接口,主要用于 Spring 内部使用

在这里插入图片描述

Pointcut(切点)

    紧接着出场的是 Pointcut(切点),它的 类图 如下:

在这里插入图片描述

哇,看这种就头疼,是不是瞬即觉得 Joinpoint(连接点) 眉清目秀了起来。其实,其他用的并不多, 自从有了 AspectJ 后,Spring 也开始‘摆烂’了,全面拥抱 AspectJ,其他实现应该都是之前没有 AspectJ 时候过的苦日子。现在重点关注 ExpressionPointcut 这条线就行了,只有一条线,Pointcut(切点) 也开始眉清目秀起来了

Advice(通知)

    接下来,有请下一位选手 Advice(通知)类图 如下:

在这里插入图片描述

Advice(通知) 这位选手更加不友好了,都快成蜘蛛网了。至于为什么会这样,已经在 第十九章 Spring之假如让你来写AOP——番外篇:Spring早期设计 中详细讨论过了。这里就简单的说下吧,其实把 Advice(通知) 分为两个阶段来理解就简单了,这两个阶段分别是:有 AspectJ 前,有 AspectJ 后。首先是第一阶段,那时候没有 AspectJ,早期的 AOP 就比较简单,由 Spring 提供对应的增强接口,用户去实现,再由 Spring 进行对应的转换

通知接口
用户实现
Spring转换

早期就分为两部分,一部分以 Advice 为核心的通知接口,另一部分以 MethodInterceptor 为核心的转换实现,大体如下:

在这里插入图片描述

后面有了 AspectJ 后,事情开始变得复杂起来了,首先 AspectJ 提供了很多强大的功能,意味着有更多的通知可以实现,一方面还得给 AspectJ 提供公共实现,还得对老接口的兼容,都统一用 AspectJ 实现。大体如下:

在这里插入图片描述

Aspect(切面)

    告别了上一位令人头疼的 Advice(通知),我们引来新的选手——Aspect(切面),这次还是个双子星。我们先来看下 Advisor类图 如下:

在这里插入图片描述

这个就是典型的 Spring 设计了,基本上和 Pointcut 对应,因为它就是用来管理 Advice(通知)Pointcut(切点)

接着是 Advised类图 如下:

在这里插入图片描述

Advised 也很明了,没啥好说的,它主要是用以管理 Advisor

Weaver(织入器)

    好的,有请下一位选手——Weaver(织入器)类图 如下:

在这里插入图片描述

Weaver(织入器) 的功能就是创建代理对象,并且把切面织入到代理中去。目前就两种实现:接口代理、类代理。那简单也是可以理解的

Target Object(目标对象)

    接着是 AOP 最后一个选手——Target Object(目标对象)类图 如下:

在这里插入图片描述

这部分内容并不是 AOP联盟 的规定,是 Spring 自己的实现。看它的实现也能明白,是为了支持不同的作用域设计的

融入IOC容器

    还有一个特别嘉宾——AspectJAwareAdvisorAutoProxyCreator类图 如下:

在这里插入图片描述
AspectJAwareAdvisorAutoProxyCreator 主要的作用就是把 AOP组件 融入到 IOC 中,用户只要配置就行了,不需要关心具体实现,这也是方面用户使用


总结

    之前一直想对 Spring 进行研究,一直不得空,现在总算把 AOP 部分过了一遍,所幸结果还是让人欣喜地

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/60319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++语言之STL

STL STL是标准模板库,是惠普实验室开发的一系列软件的统称 STL的6大组件 容器 算法 迭代器 仿函数 适配器 空间适配器 容器 作用:容纳存储的数据 分类: 序列式容器: 强调值的顺序,每个元素均有固定的位置,除非用删除或插入的操作改变这个位置,如vector,deque/queue,list; 关联式…

嵌入式实验报告:家用计时器

实验目的和要求 1、实验目的 掌握STM32串口通信原理。学习编程实现STM32的UART通信掌握STM32中断程序设计流程。熟悉STM32固件库的基本使用。熟悉STM32定时器中断设计流程。2、实验要求 设计一个家用计时器,其功能如下: 利用串口设置计时时间,格式:XX:XX:X 例如01:59:…

阿里巴巴官方「SpringCloudAlibaba全彩学习手册」限时开源!

最近我在知乎上看过的一个热门回答: 初级 Java 开发面临的最大瓶颈在于,脱离不出自身业务带来的局限。日常工作中大部分时间在增删改查、写写接口、改改 bug,久而久之就会发现,自己的技术水平跟刚工作时相比没什么进步。 所以我们…

低成本搭建单相220V转三相380V变频器配滤波器的转换器

一、单相转三相的迫切需求 在许多工业和商业场景中,三相电源因其高效、稳定的特性而被广泛应用。然而,并非所有场所都能提供三相电源,尤其是在一些老旧建筑或偏远地区,单相220V电源更为常见。这就迫切需要我们找到一种有效的转换…

如何从 VMware 官网下载最新版本的 VMware Workstation

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 下载VMware 📒📝 操作步骤🎈 获取方式 🎈⚓️ 相关链接 ⚓️📖 介绍 📖 你是否曾尝试从 VMware 官网下载 VMware Workstation,但总是被繁杂的选择和复杂的操作困扰?VMware 提供的产品种类繁多,而且官网页面设计复…

数据结构_图的遍历

深度优先搜索遍历 遍历思想 邻接矩阵上的遍历算法 void Map::DFSTraverse() {int i, v;for (i 0; i < MaxLen; i){visited[i] false;}for (i 0; i < Vexnum; i){// 如果顶点未访问&#xff0c;则进行深度优先搜索if (visited[i] false){DFS(i);}}cout << endl…

基于CVE安全公告号,全面修复麒麟ARM系统OpenSSH漏洞

前言&#xff1a;负责的其中一个从0开始搭建的某生产项目上线前需要做青藤安全扫描&#xff0c;过了后才允许上线&#xff0c;该项目从操作系统、中间件、数据库、容器等全国产信创化&#xff0c;公司公告为CVE安全公告号&#xff0c;而修复漏洞的责任归我&#xff0c;需要根据…

python成绩分级 2024年6月python二级真题 青少年编程电子学会编程等级考试python二级真题解析

目录 python成绩分级 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python成绩分级 2024年6月 python编程等级考试二级编程题 一、题目要求 …

vulnhub靶场-tomato

arp-scan -l用arp-scan探测一下网段内目标靶机的IP arp-scan 是一款轻量级的arp扫描工具&#xff0c;会解析mac地址&#xff0c;就是想 局域网 中所有可能的ip地址发出arp请求包&#xff0c;如果得到arp回应&#xff0c;就证明了局域网中某主机使用了该ip。 nmap扫一下c段 nma…

JavaScript中的执行顺序

分析下面JavaScript代码的执行顺序&#xff1a; <script>setTimeout(() > console.log(代码开始执行), 0)new Promise((resolve, reject) > {console.log(开始for循环);for (let i 0; i < 10000; i) {i 99 && resolve()}}).then(() > console.log(…

【天壤智能-注册安全分析报告-无验证纯IP限制存在误拦截隐患】

前言 由于网站注册入口容易被机器执行自动化程序攻击&#xff0c;存在如下风险&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露&#xff0c;不符合国家等级保护的要求。短信盗刷带来的拒绝服务风险 &#xff0c;造成用户无法登陆、注册&#xff0c;大量收到垃圾短信的…

大数据实验4-HBase

一、实验目的 阐述HBase在Hadoop体系结构中的角色&#xff1b;能够掌握HBase的安装和配置方法熟练使用HBase操作常用的Shell命令&#xff1b; 二、实验要求 学习HBase的安装步骤&#xff0c;并掌握HBase的基本操作命令的使用&#xff1b; 三、实验平台 操作系统&#xff1…

内网安全隧道搭建-ngrok-frp-nps-sapp

1.ngrok 建立内网主机与公网跳板机的连接&#xff1a; 内网主机为客户机&#xff1a; 下载客户端执行 2.frp &#xff08;1&#xff09;以下为内网穿透端口转发 frp服务端配置&#xff1a; bindPort 为frp运行端口 服务端运行 ./frps -c frps.ini frp客户端配置&#xf…

三十一、构建完善微服务——API 网关

一、API 网关基础 系统拆分为微服务后&#xff0c;内部的微服务之间是互联互通的&#xff0c;相互之间的访问都是点对点的。如果外部系统想调用系统的某个功能&#xff0c;也采取点对点的方式&#xff0c;则外部系统会非常“头大”。因为在外部系统看来&#xff0c;它不需要也没…

前端:HTML (学习笔记)【1】

一&#xff0c;网络编程的三大基石 1&#xff0c;URL &#xff08;1&#xff09;url —— 统一资源定位符&#xff1a; 网址——整个互联网中可以唯一且准确的确定一个资源的位置。 【项目外】 网址——https://www.baidu.com/ …

实验室管理现代化:Spring Boot技术方案

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

如何在 Microsoft Edge 中设置代理: 快速而简单的方法

你知道在 Microsoft Edge 中设置代理可以大大提升浏览体验吗&#xff1f;无论您是想提高隐私保护、访问受地理位置限制的内容&#xff0c;还是想更高效地浏览网页&#xff0c;代理服务器都能改变一切。 本指南将介绍如何在 Microsoft Edge 中设置代理&#xff0c;解决常见的代…

Excel如何批量导入图片

这篇文章将介绍在Excel中如何根据某列数据&#xff0c;批量的导入与之匹配的图片。 准备工作 如图&#xff0c;我们准备了一张员工信息表以及几张员工的照片 可以看到&#xff0c;照片名称是每个人的名字&#xff0c;与Excel表中的B列&#xff08;姓名&#xff09;对应 的卢易…

【操作系统】操作系统的特征

操作系统的七个基本特征 并发性&#xff08;Concurrence&#xff09; 并发性是指操作系统在同一时间间隔内执行和调度多个程序的能力&#xff0c;提高资源利用率和系统效率。尽管多个任务可能在同一时刻看似同时进行&#xff0c;但实际上&#xff0c;CPU在多个任务之间快速切…

iPhone 17 Air看点汇总:薄至6mm 刷新苹果轻薄纪录

我们姑且将这款iPhone 17序列的超薄SKU称为“iPhone 17 Air”&#xff0c;Jeff Pu在报告中提到&#xff0c;我同意最近关于 iPhone 17超薄机型采用6 毫米厚度超薄设计的传言。 如果这一测量结果被证明是准确的&#xff0c;那么将有几个值得注意的方面。 首先&#xff0c;iPhone…