当前位置: 首页 > news >正文

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

废话版

什么是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 前置通知

  • 方法调用前执行

相关文章:

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

废话版什么是AOP关于什么是AOP,这里还是要简单介绍下AOP,Aspect Oriented Programming,面向切面编程,通过预编译和运行期间提供动态代理的方式实现程序功能的统一维护,使用AOP可以降低各个部分的耦合度,提高…...

华为OD机试用Python实现 -【任务混部】(2023-Q1 新题)

华为OD机试题 华为OD机试300题大纲任务混部题目输入输出示例一输入输出说明示例二输入输出说明备注Code代码编写思路华为OD机试300题大纲 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:blog.csdn.net/hihell/ca…...

Linux yum 命令

yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。 基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖…...

package.json 字段配置

文章目录环境导入相关main 和 modulewebpack resolve.mainFieldsbrowserexports定义其他模块根据导入语句导出嵌套环境导出vue中 exports 用法自定义运行环境环境导入相关 main 和 module 根据导入模块时不同的模块规范语句查找不同的入口文件 "main": "dist…...

springboot中集成redis,二次封装成工具类

大家好,我是雄雄,欢迎关注微信公众号:** 雄雄的小课堂 ** 现在是:2023年2月28日11:01:56 前言 redis大家应该都不陌生,我们在好多场景下都会使用,最近在面试别人的时候,也会问一些关于redis的…...

Linux Vim 简介

文章目录01. 编辑器 Gedit 介绍02. 什么是 Vi(Vim)03. vim工作模式4.1 命令模式4.2 编辑模式4.3 末行模式04. vim教程05. vim基本操作06. vim实用操作7.1 命令模式下的操作7.2 末行模式下的操作01. 编辑器 Gedit 介绍 gedit 是一个 GNOME 桌面环境下兼容 UTF-8 的 文本编辑器。…...

软件测试面试题 —— 整理与解析(2)

😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:🌎【Austin_zhai】🌏 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能&#xf…...

HashMap与Hashtable的这九个区别,你知道吗

Hashtable Hashtable是原始的java.util的一部分,属于一代集合类,是一个Dictionary具体的实现 。Java1.2重构的Hashtable实现了Map接口,因此,Hashtable现在集成到了集合框架中。它和HashMap类很相似。 Hashtable与HashMap的区别 …...

Java奠基】掌握Java基础知识

目录 常见字面量 特殊字面量 数据类型 标识符 键盘录入 常见字面量 字面量就是数据在程序中的书写格式,字面量的分类如下: 字面量类型说明举例整数类型不带小数点的数字12,25小数类型带小数点的数字3.14,-5,20…...

Hive窗口函数-lead/lag函数

前面我们学习的first_value和last_value 取的是排序后的数据截止当前行的第一行数据和最后一行数据 Lag和Lead分析函数可以在一次查询中取出当前行后N行和前N行的数据,虽然可以不用排序,但是往往只有在排序的场景下取前面或者后面N 行数据才有意义 这种…...

2023JAVA面试题全集超全面超系统超实用!早做准备早上岸

2022年我凭借一份《Java面试核心知识点》成功拿下了阿里、字节、小米等大厂的offer,两年的时间,为了完成我给自己立的flag(拿下一线互联网企业offer大满贯),即使在职也一直在不断的学习与备战面试中!——或…...

FreeRTOS入门(05):事件组

文章目录目的基础说明相关函数使用演示总结目的 事件组是RTOS中相对常用的用于任务间交互的功能,这篇文章将对相关内容做个介绍。 本文代码测试环境见前面的文章:《FreeRTOS入门(01):基础说明与使用演示》 基础说明…...

【API网关】Kong安装和基本操作

文章目录前言一、API网关选型和Kong的安装1. 什么是API网关2. API网关技术选型3. 安装postgresql和migrations4. 安装kong5. 安装konga二、基本的路由转发配置1. kong的8001、8000和1337端口号的关系2. 基本的路由转发配置3. kong集成consul实现服务发现和负载均衡4. kong配置j…...

git --- stash用法

1 git stash命令介绍 // 保存当前分支的修改,回到上个版本的状态 git stash // 保存当前分支的修改,回到上个版本的状态,msg是保存当前修改的说明 git stash save "msg" // 用来展示所有保存的列表 git stash list // 用来展示某一保存记录所修改的操作 gi…...

【星海出品】VScode安装配置

安装VScode最好在官方网站上下载。 例如 https://code.visualstudio.com/Download 不知道自己的windows版本的话,可以命令行WINR 运行 输入: systeminfo | find "OS" //获取OS的版本信息。 systeminfo | find "系统类型" //获取系统…...

docker 基础命令备忘录

1. 官方安装docker curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.shcurl -L "https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod x…...

华为OD机试 - 创建二叉树(Java JS Python)

题目描述 请按下列描述构建一颗二叉树,并返回该树的根节点: 1、先创建值为-1的根结点,根节点在第0层; 2、然后根据operations依次添加节点: operations[i] = [height, index] 表示对第 height 层的第index 个节点node, 添加值为 i 的子节点: 若node 无「左子节点」,则…...

服务案例|基于IT事件管理,提升业务连续性

数字化经济时代,IT架构复杂性越来越高,业务连续性成为很多行业或企业最核心的任务。业务连续性管理是一个不断提升的过程,围绕事件“发现-响应-定位处理-降低发生”的事件处理思路,结合平台化运维,助力业务快速提升。 …...

你说下HashMap的工作原理?

我在网上看了很多文章 ,各种长篇大论 ,原理细节、实在看不下去了,所以着重讲一下,HashMap 面试会问到的点 说人话, 你们公司的集合 不会自研吧, 假如 你们叫 锤子科技 ,那老板也不会要求你去写一…...

k8s 配置ingress 并做一个demo

需求:k8s 配置好之后除了 nodeport 以外都是对集群内部的行为使用nodeport 并不是很友好,要自己处理很多的端口管理使用ingress 可以更好的整合配置服务进程:下载ingress-nginx 的yaml 文件https://github.com/kubernetes/ingress-nginx/blob…...

【手把手一起学习】(七) Altium Designer 20常用PCB设计规则

1 常用PCB设计规则 PCB规则设计是PCB设计中至关重要的环节,它约束了电气要求、布线方式、器件摆放位置等,为后续的手动布局、布线提供依据。完善的PCB规则设计,可以减少设计中的错误,提高PCB设计效率。 1.1 PCB设计规则管理器 …...

(01)Unity 中使用 HDRP

概述Unity在2019.2版本中推出HDRP(高清渲染管线),目的是为了提高图形质量,实现从照片写实到风格化的图像。先看一下官方对HDRP的概述:高清渲染管线 (HDRP) 是由 Unity 构建的高保真脚本化渲染管…...

使用cmake在win10编译yolov5+tensorRT+cuda+cudnn+protobuf代码进行混合编译

这里进行之前需要把protobuf在win10下编译,可以参考这篇文章从Linux下载下来的工程代码,这里建议直接使用vs系列打开不要用vscode打开,vscode对win下的cmake不友好,主要体现在报错机制无法直接定位,题主的环境是vs2022…...

《C++ Primer Plus》第17章:输入、输出和文件(7)

编程练习 编写一个程序计算输入流中第一个$之前的字符数目&#xff0c;并将$留在输入流中。 #include<iostream>int main() {int ct 0;while(std::cin.peek()!$){ct;std::cin.get();}std::cout << "num: " << ct << std::endl;return 0; }答…...

PGLBox 超大规模 GPU 端对端图学习训练框架正式发布

作者 | PGLBox项目组 导读 PGLBox是百度研发的基于GPU的大规模图模型训练框架&#xff0c;支持数百亿节点和边的图模型全GPU训练&#xff0c;已在百度广泛部署。相比业界主流的分布式 CPU 解决方案&#xff0c;PGLBox 具有超高性能、超大规模、算法丰富、灵活易用、落地广泛等优…...

sql-labs-Less1

靶场搭建好了&#xff0c;访问题目路径 http://127.0.0.1/sqli-labs-master/Less-1/ 我最开始在做sql-labs靶场的时候很迷茫&#xff0c;不知道最后到底要得到些什么&#xff0c;而现在我很清楚&#xff0c;sql注入可以获取数据库中的信息&#xff0c;而获取信息就是我们的目标…...

又一个国内类ChatGPT模型?【秘塔科技上线自研LLM大模型「对话写作猫」】

又一个国内类ChatGPT模型&#xff1f;【秘塔科技上线自研LLM大模型「对话写作猫」】 说个题外话&#xff0c;今天一大早就收到了Biying的邮件。前段时间不是申请了New Biying的内测吗&#xff1f;下午可以尝试一下玩一会儿。如果体验感还不错或者还有很多bug&#xff0c;那我到…...

卷麻了,00后测试用例写的比我还好,简直无地自容......

经常看到无论是刚入职场的新人&#xff0c;还是工作了一段时间的老人&#xff0c;都会对编写测试用例感到困扰&#xff1f;例如&#xff1a; 如何编写测试用例&#xff1f; 作为一个测试新人&#xff0c;刚开始接触测试&#xff0c;对于怎么写测试用例很是头疼&#xff0c;无法…...

动态网页的核心——JSP

文章目录1&#xff0c;JSP 概述2&#xff0c;JSP 小案例2.1 搭建环境2.2 导入 JSP 依赖2.3 创建 jsp 页面2.4 编写代码2.5 测试3&#xff0c;JSP 原理4&#xff0c;JSP 总结4.1 JSP的 缺点4.2技术的发展历程4.3JSP的必要性最后说一句1&#xff0c;JSP 概述 JSP&#xff08;全称…...

RK3588平台开发系列讲解(系统篇)init.d介绍

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、Linux启动简介二、sysvinit配置三、inid.d介绍沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇介绍init.d相关知识。 一、Linux启动简介 Linux用户空间启动时,第一个会启动init进程,用来引导启动其…...

赣州做网站哪家好/seo优化多久能上排名

sklearn实战-乳腺癌细胞数据挖掘&#xff08;博主亲自录制视频&#xff09; https://study.163.com/course/introduction.htm?courseId1005269003&utm_campaigncommission&utm_sourcecp-400000000398149&utm_mediumshare 架构概览 各组件作用 Scrapy Engine 引擎负…...

github主页做网站/站内优化主要从哪些方面进行

转载自&#xff1a;https://blog.csdn.net/liub37/article/details/83310879 参考&#xff1a;https://www.cnblogs.com/wisewrong/p/8985471.html 下面开始工作&#xff1a; 插件安装 tinymce官方提供了一个vue的组件tinymce-vue 如果有注册或购买过服务的话&#xff0c;直接…...

如何调整wordpress页面的顺序/软件网站排行榜

什么是算法 算法可以理解就是一系列被控制的步骤&#xff0c;你通过按序执行这些步骤可以实现一些目标或者产生一些输出。 时间复杂度 时间复杂度是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数.时间复杂度常用大O表述表述&#xff0c…...

怎么做简单的微信浏览的网站/成都最新数据消息

http://www.52c51.com/article/63.html市场上盛行的电子高压灭蚊手拍&#xff08;简称“电蚊拍”&#xff09;&#xff0c;以其实用、灭蚊效果好、无化学污染、安全卫生等优点&#xff0c;普遍受到人们的欢迎。其实这种电灭蚊拍线路简单&#xff0c;具有一定电子制作能力的青少…...

wordpress参数手册/厦门网站设计公司

本文参考自油管上某个国外大神的公开演讲视频&#xff0c;学习了一下觉得很不错&#xff0c;所以在项目中也使用了这些不错的技巧。 1. watch 与 computed 的巧妙结合 如上图&#xff0c;一个简单的列表页面。 你可能会这么做&#xff1a; created(){this.fetchData() },watch:…...

怎么用linux做网站/百度竞价排名价格查询

本教程将教你如何使用qmake。 从简单的实例开始 让我们假设你刚才完成了您的应用程序的基本实现&#xff0c;您已经创建了以下文件&#xff1a; hello.CPPhello.hmain.cpp首先&#xff0c;用你最喜欢的纯文本编辑器&#xff0c;创建一个名为hello.pro的文件。你需要做的第一件…...