【Spring源码】Spring AOP的核心概念

news2024/11/14 4:08:12

废话版

什么是AOP

关于什么是AOP,这里还是要简单介绍下

AOP,Aspect Oriented Programming,面向切面编程,通过预编译和运行期间提供动态代理的方式实现程序功能的统一维护,使用AOP可以降低各个部分的耦合度,提高代码质量

重要概念

  • JoinPoint 连接点:程序执行的某个特定位置

  • PointCut 切点:执行的具体位置(哪些方法要执行)

  • Advice 增强:额外的业务逻辑

  • Aspect 切面:切点+增强

人话版

这些都是比较正式的定义,为了便于理解,用我们身边前一段的状况举个简单的🌰来描述下AOP到底是用来干嘛以及这些重要概念到底指的是什么吧

俺叫李四,是一只打工崽,俺的一天是这样的:

上班离开居住的小区,进入上班的写字楼,中午去办公楼对面街的小饭馆恰饭,晚上下班离开写字楼,进小区回家

井然有序,而且成年累月几乎不会有什么大改变,

忽然,XXX流感😷开始蔓延起来了,于是在写字楼、小饭店这些公共场合的门口都增加了一个进入需要【扫🐎看🐎】的流程(还好出入小区不用),于是,俺的一天变成了这样:

上班离开居住的小区,【扫🐎看🐎】进入上班的写字楼,中午去办公楼对面街的小饭馆【扫🐎看🐎】恰饭,晚上下班离开写字楼,进小区回家

于是——

进出小区、进出写字楼、进出恰饭的小饭店,这些所有可能会增加“额外的业务逻辑”的地方——Join Point 连接点

【扫🐎看🐎】的流程就是俺日常生活以外的部分,即“额外的业务逻辑”——Advice 增强

写字楼、恰饭的小饭店,真实增加了【扫🐎看🐎】这个额外的业务逻辑”的地方——Point Cut 切点

不知道有没有客官注意到,真实的情况是:只有进入这些场所的时候需要【扫🐎看🐎】,离开是不需要的,而切点只标明了位置,那么哪里对“进入”还是“离开”需要【扫🐎看🐎】做出了限制🚫呢?

自问自答:Advice 增强

因为Spring AOP中的Advice其实也是有分类的,我们可以直接通过源代码进行查看

可以看到,抽象类AbstractAspectJAdvic有5个的实现类:

  • AspectJAfterAdvice 后置通知

  • 方法退出的时候执行,不论是正常返回还是异常退出都会执行

  • AspectJAfterReturningAdvice 返回后通知

  • 方法退出的时候执行,只有方法正常完成后执行

  • AspectJAfterThrowingAdvice 抛出异常后通知

  • 方法退出的时候执行,只有方法抛出异常退出时执行

  • AspectJAroundAdvice 环绕通知

  • 可以将要执行的方法(point.proceed())进行封装📦,可在其前后添加需要执行的操作

  • AspectJMethodBeforeAdvice 前置通知

  • 方法调用前执行

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

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

相关文章

openfeign负载均衡策略 | Spring Cloud 5

一、Spring Cloud LoadBalancer介绍 Spring Cloud LoadBalancer是Spring Cloud官网提供的一个客户端负载均衡器,功能类似于Ribbon。在Spring Cloud Nacos 2021移除了中Ribbon组件,Spring Cloud在Spring Cloud Commons项目中,添加了Spring Cl…

华为OD机试题,用 Java 解【N 进制减法】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…

Linux | 分布式版本控制工具Git【版本管理 + 远程仓库克隆】

文章目录一、前言二、有关git的相关历史介绍三、Git版本管理1、感性理解 —— 大学生实验报告2、程序员与产品经理3、张三的CEO之路 —— 版本管理工具的诞生四、如何在Linux上使用Git1、创建仓库2、将仓库克隆到本地3、git三板斧① git add② git commit③ git push4、有关git…

yarn run serve报错Error: Cannot find module ‘@vue/cli-plugin-babel‘ 的解决办法

问题概述 关于这个问题,是在构建前端工程的时候遇到的,项目构建完成后,“yarn run serve”启动项目时,出现的问题:“ Error: Cannot find module ‘vue/cli-plugin-babel‘ ” 如下图: 具体信息如下&…

(24秋招笔试准备)回溯专题--代码随想录刷题记录

回溯算法理论基础回溯三部曲:编辑切换为居中添加图片注释,不超过 140 字(可选)组合问题https://mp.weixin.qq.com/s/OnBjbLzuipWz_u4QfmgcqQ组合总和https://mp.weixin.qq.com/s/HX7WW6ixbFZJASkRnCTC3whttps://mp.weixin.qq.com/…

Linux系统认知——驱动认知

文章目录一、驱动相关概念1.什么是驱动2.被驱动设备分类3.设备文件的主设备号和次设备号4.设备驱动整体调用过程二、基于框架编写驱动代码1.驱动代码框架2.驱动代码的编译和测试三、树莓派I/O口驱动的编写1.微机的总线地址、物理地址、虚拟地址介绍2.通过树莓派芯片手册确定需要…

zabbix部署

文章目录前言一、zabbix简介二、zabbix下载与部署三、部署完成、访问前端测试前言 一、zabbix简介 Zabbix 是一个企业级分布式开源监控解决方案。Zabbix 软件能够监控众多网络参数和服务器的健康度、完整性。Zabbix 使用灵活的告警机制,允许用户为几乎任何事件配置…

数据结构与算法——4时间复杂度分析(常见的大O阶)

这篇文章是时间复杂度分析的第二篇。在前一篇文章中,我们从0推导出了为什么要用时间复杂度,时间复杂度如何分析以及时间复杂度的表示三部分内容。这篇文章,是对一些常用的时间复杂度进行一个总结,相当于是一个小结论 1.常见的大O…

【LeetCode】剑指 Offer(11)

目录 题目:剑指 Offer 29. 顺时针打印矩阵 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 题目:剑指 Offer 29. 顺时针…

西电计算机通信与网络(计网)简答题计算题核心考点汇总(期末真题+核心考点)

文章目录前言一、简答计算题真题概览二、网桥,交换机和路由器三、ARQ协议四、曼彻斯特编码和差分曼彻斯特编码五、CRC六、ARP协议七、LAN相关协议计算前言 主要针对西安电子科技大学《计算机通信与网络》的核心考点进行汇总,包含总共26章的核心简答。 【…

华为OD机试模拟题 用 C++ 实现 - 自动曝光(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 最多获得的短信条数(2023.Q1)) 文章目录 最近更新的博客使用说明自动曝光题目输入输出描述示例一输入输出说明示例二输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出࿰

Ubuntu搭建maven私服

1.安装JDK8 已经是JDK8的需要配置环境变量,如果是更高版本的JDK则需要修改nexus配置文件 2.下载nexus安装包 百度网盘下载:链接:https://pan.baidu.com/s/1DfKqql8tZNQXEBxAEH7UyA 提取码:hx4p安装到有磁盘的目录如下所示&…

大数据框架之Hadoop:MapReduce(三)MapReduce框架原理——Join多种应用

3.7.1Reduce Join 1、工作原理 Map端的主要工作:为来自不同表或文件的key/value对,打标签以区别不同来源的记录。然后用连接字段作为key,其余部分和新加的标志作为value,最后进行输出。 Reduce端的主要工作:在Reduc…

C++杂谈(一)

前言 本系列也是慢更系列,主要收纳一些还不够单独成系列的C的杂项问题,或是一些与C有关,但不属于核心知识的一些旁系问题。 关于C与C的关系 「学C要先学C吗?」 「C和C是不是完全不同的两个语言?」 「这个语法是C的还…

Nginx网站服务——Nginx虚拟主机(基于域名、IP、端口)附带超详细实验步骤

文章目录一、基于域名的nginx虚拟主机1、基于域名的nginx虚拟主机的操作步骤2、实例操作:基于域名的nginx虚拟主机二、基于IP的nginx虚拟主机1、基于IP的nginx虚拟主机的操作步骤2、实例操作:基于IP的nginx虚拟主机三、基于端口的nginx虚拟主机1、基于端…

EasyRecovery16支持恢复文档表格图片音视频等各种不同的数据

误删重要文件这样的事想必大家都不陌生,有时粗心起来可能经常会出现这样的事情。现代人的生活和工作基本离不开电脑等多媒体设备,每天需要处理的文件量和数据量也是呈指数增长,所以一款能够实现误删数据修复的软件可以说是当代人的电脑必装了…

TOSCA自动化测试工具

TOSCA由德国公司Tricentis研发,提供英文和德语两种版本。 目前他们的网上培训课程大约是2000一套,从初级到高级,从工程师到BA,有技术,也有测试管理。 TOSCA的思想是,不用会编程的测试人员可以直接上手自动…

RK3568平台开发系列讲解(驱动基础篇)SMP(Symmetrical Multi-Processing)

🚀返回专栏总目录 文章目录 一、linux SMP 和 AMP二、linux SMP的启动流程三、CPU的描述:cpumask四、CPU之间的关系沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍 SMP(Symmetrical Multi-Processing)。 一、linux SMP 和 AMP 目前支持多核处理器的实时操…

RabbitMQ延迟队列

目录 一、概念 二、使用场景 三、RabbitMQ 中的 TTL (一)队列设置 TTL (二)消息设置 TTL (三)两者的区别 四、整合SpringBoot实现延迟队列 (一)创建项目 (二&am…

使用vscode+picgo+腾讯云搭建本地markdown编辑环境

本文主要介绍如何配置本地markdown编辑环境,主要使用vscodepicgo腾讯云,vscode为微软提供的免费的编辑器,picgo用于将图片方便上传到云端并生成链接,腾讯云提供存储环境。markdown语法可参考官方文档. 环境 windows10vscode 编辑…