面向切面编程 AOP
提示:主要内容参考动力节点老杜的Spring6讲义。
面向切面编程 AOP
- 一、AOP介绍
- 二、AOP的七大术语
- 三、切点表达式
- IoC使软件组件松耦合。AOP让你能够捕捉系统中经常使用的功能,把它转化成组件。
AOP(Aspect Oriented Programming):面向切面编程,面向方面编程。(AOP是一种编程思想)- AOP底层使用的就是
动态代理来实现的。 - Spring的AOP使用的动态代理是:JDK动态代理 + CGLIB动态代理技术。Spring在这两种动态代理中灵活切换,如果是代理接口,会默认使用JDK动态代理,如果要代理某个类,这个类没有实现接口,就会切换使用CGLIB。当然,你也可以强制通过一些配置让Spring只使用CGLIB。
一、AOP介绍
- 一般一个系统当中都会有一些系统服务,例如:日志、事务管理、安全等。这些系统服务被称为:交叉业务
- 这些交叉业务几乎是通用的,不管你是做银行账户转账,还是删除用户数据。日志、事务管理、安全,这些都是需要做的。
- 如果在每一个业务处理过程当中,都掺杂这些交叉业务代码进去的话,存在两方面问题:
- 第一:交叉业务代码在多个业务流程中反复出现,显然这个交叉业务代码没有得到复用。并且修改这些交叉业务代码的话,需要修改多处。
- 第二:程序员无法专注核心业务代码的编写,在编写核心业务代码的同时还需要处理这些交叉业务。
- 使用AOP可以很轻松的解决以上问题。

- 用一句话总结AOP:将与核心业务无关的代码独立的抽取出来,形成一个独立的组件,然后以横向交叉的方式应用到业务流程当中的过程被称为AOP。
- AOP的优点:
- 第一:代码复用性增强。
- 第二:代码易维护。
- 第三:使开发者更关注业务逻辑。
二、AOP的七大术语
- 连接点 Joinpoint
- 在程序的整个执行流程中,
可以织入切面的位置。方法的执行前后,异常抛出之后等位置。
- 在程序的整个执行流程中,
- 切点 Pointcut
- 在程序执行流程中,
真正织入切面的方法。(一个切点对应多个连接点)
- 在程序执行流程中,
- 通知 Advice
- 通知又叫增强,就是具体你要织入的代码。
- 通知包括:
- 前置通知
- 后置通知
- 环绕通知
- 异常通知
- 最终通知
- 切面 Aspect
- 切点 + 通知就是切面。
- 织入 Weaving
- 把通知应用到目标对象上的过程。
- 代理对象 Proxy
- 一个目标对象被织入通知后产生的新对象。
- 目标对象 Target
- 被织入通知的对象。

- 被织入通知的对象。
三、切点表达式
- 切点表达式用来定义通知(Advice)往哪些方法上切入。
- 切入点表达式语法格式:
execution([访问控制权限修饰符] 返回值类型 [全限定类名]方法名(形式参数列表) [异常])
- 访问控制权限修饰符:
- 可选项。
- 没写,就是4个权限都包括。
- 写public就表示只包括公开的方法。
- 返回值类型:
- 必填项。
- * 表示返回值类型任意。
- 全限定类名:
- 可选项。
- 两个点 “..” 代表当前包以及子包下的所有类。
- 省略时表示所有的类。
- 方法名:
- 必填项。
- * 表示所有方法。
- set* 表示所有的set方法。
- 形式参数列表:
- 必填项
- () 表示没有参数的方法
- (..) 参数类型和个数随意的方法
- (*) 只有一个参数的方法
- (*, String) 第一个参数类型随意,第二个参数是String的。
- 异常:
- 可选项。
- 省略时表示任意异常类型。
- 案例:
execution(public * com.powernode.mall.service.*.delete*(..)) service包下所有的类中以delete开始的所有方法 execution(* com.powernode.mall..*(..)) mall包下所有的类的所有的方法 execution(* *(..)) 所有类的所有方法
相关文章:
面向切面编程 AOP
提示:主要内容参考动力节点老杜的Spring6讲义。 面向切面编程 AOP 一、AOP介绍二、AOP的七大术语三、切点表达式 IoC使软件组件松耦合。AOP让你能够捕捉系统中经常使用的功能,把它转化成组件。AOP(Aspect Oriented Programming)&a…...
POS 之 奖励机制
为什么需要有奖惩机制 如果没有奖励,就不会有节点参与POS,运营节点有成本,而奖励正是让运营者获利的方式 如果没有惩罚,网络上会充斥着很多无效节点,会扰乱甚至破坏网络 所有奖励和惩罚在每个 Epoch 实施一次 奖励 什…...
Unity类银河恶魔城学习记录9-7 p88 Crystal instead of Clone源代码
Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Blackhole_Skill_Controller.cs using System.Collections; using System…...
导出RWKV模型为onnx
测试模型: https://huggingface.co/RWKV/rwkv-5-world-3b 导出前对modeling_rwkv5.py进行一个修改: # out out.reshape(B * T, H * S) out out.reshape(B * T, H * S, 1) # <<--- modified out F.group_norm(out, nu…...
【LeetCode】整数转罗马数字 C语言 | 此刻,已成艺术(bushi)
Problem: 12. 整数转罗马数字 文章目录 思路解题方法复杂度Code 思路 暴力破解 转换 解题方法 由思路可知 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( 1 ) O(1) O(1) Code char* intToRoman(int num) {char *s (char*)malloc(sizeof(char)*4000), *p s;while(…...
移动App开发常见的三种模式:原生应用、H5移动应用、混合模式应用
引言 在移动应用市场的迅猛发展中,移动App开发正日益成为技术创新和用户体验提升的焦点。对于开发者而言,选择适合自己项目的开发模式成为至关重要的决策。本文将探究移动App开发的三种常见模式:原生应用、H5移动应用和混合模式应用。这三种…...
k8s Secret配置资源,ConfigMap 存储配置信资源管理详解
目录 一、Secret 概念 三种Secret类型 pod三种使用secret的方式 应用场景:凭据: 二、 示例 2.1、用kubectl create secret命令创建 Secret 创建Secret: 查看Secret列表: 描述Secret: 2.2、用 base64 编码&…...
POS 之 最终确定性
Gasper Casper 是一种能将特定区块更新为 最终确定 状态的机制,使网络的新加入者确信他们正在同步规范链。当区块链出现多个分叉时,分叉选择算法使用累计投票来确保节点可以轻松选择正确的分叉。 最终确定性 最终确定性是某些区块的属性,意味…...
Vue快速开发一个主页
前言 这里讲述我们如何快速利用Vue脚手架快速搭建一个主页。 页面布局 el-container / el-header / el-aside / el-main:https://element.eleme.cn/#/zh-CN/component/container <el-container><el-header style"background-color: #4c535a"…...
Java SE入门及基础(33)
final 修饰符 1. 应用范围 final 修饰符应该使用在类、变量以及方法上 2. final 修饰类 Note that you can also declare an entire class final. A class that is declared final cannot be subclassed. This is particularly useful, for example, when creating an imm…...
ChatGPT逐步进入留学圈但并不能解决留学规划的问题
2022 年底,一个能像人类一样对话的AI软件ChatGPT,在5天内突破一百万用户,风靡全球,如今用户已达1.8亿。 四个月后,ChatGPT进化为GPT4版本。该版本逻辑、数学推理能力卓越。拿留美标准化考试举例,GPT4能够在…...
WebGL之灯光使用解析
在使用灯光之前,首先我们需要了解,与定义更广泛的 OpenGL 不同,WebGL 并没有继承 OpenGL 中灯光的支持。所以你只能由自己完全得控制灯光。幸运得是,这也并不是很难,本文接下来就会介绍完成灯光的基础。 在 3D 空间中…...
【Spring云原生系列】SpringBoot+Spring Cloud Stream:消息驱动架构(MDA)解析,实现异步处理与解耦合
🎉🎉欢迎光临,终于等到你啦🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟持续更新的专栏《Spring 狂野之旅:从入门到入魔》 &a…...
PostgreSQL索引篇 | TSearch2 全文搜索
PostgreSQL版本为8.4.1 (本文为《PostgreSQL数据库内核分析》一书的总结笔记,需要电子版的可私信我) 索引篇: PostgreSQL索引篇 | BTreePostgreSQL索引篇 | GiST索引PostgreSQL索引篇 | Hash索引PostgreSQL索引篇 | GIN索引 (倒排…...
SpringMVC 中的常用注解和用法
⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:JavaEE 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 注解 1. MVC定义2. 注解2.1 RequestMappin…...
智慧城市中的数据力量:大数据与AI的应用
目录 一、引言 二、大数据与AI技术的融合 三、大数据与AI在智慧城市中的应用 1、智慧交通 2、智慧环保 3、智慧公共安全 4、智慧公共服务 四、大数据与AI在智慧城市中的价值 1、提高城市管理的效率和水平 2、优化城市资源的配置和利用 3、提升市民的生活质量和幸福感…...
德人合科技|天锐绿盾加密软件——数据防泄漏系统
德人合科技是一家专注于提供企业级信息安全解决方案的服务商,提供的天锐绿盾加密软件是一款专为企业设计的数据安全防护产品,主要用于解决企事业单位内部敏感数据的防泄密问题。 www.drhchina.com PC端: https://isite.baidu.com/site/wjz012…...
C语言---单身狗问题
1.单身狗初阶 这个题目就是数组里面有一串数字,都是成对存在的,只有一个数字只出现了一次,请你找出来 (1)异或是满足交换律的,两个相同的数字异或之后是0; (2)让0和每个…...
一次gitlab 502故障解决过程
通过top,发现prometheus进程占用CPU接近100%,这肯定有点异常。gitlab-ctl tail prometheus 发现有报错的情况,提示空间不足。暂时不管空间的问题。 2024-03-07_05:48:09.01515 ts2024-03-07T05:48:09.014Z callermain.go:1116 levelerror err"open…...
Xilinx 7系列 FPGA硬件知识系列(一)——FPGA选型参考
目录 1.1 Xilinx-7系列产品的工艺级别 编辑1.2 Xilinx-7系列产品的特点 1.2.1 Spartan-7系列 1.2.2 Artix-7系列 1.2.3 Kintex-7系列 1.2.4 Virtex-7系列 1.3 Xilinx-7系列FPGA对比 1.3.1 DSP资源柱状图 1.3.2 Block RAM资源柱状图 1.3.3 高速串行收…...
2026届毕业生推荐的AI辅助论文神器横评
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek DeepSeek作为大语言模型,在学术论文写作范畴有着一定辅助意义,研究者…...
数字化转型下的设备巡检:从痛点解析到高效落地实践
1. 制造业设备巡检的数字化转型痛点 制造业设备巡检正面临前所未有的挑战。记得去年我去一家汽车零部件厂调研,看到车间主任桌上堆着半米高的纸质巡检单,他苦笑着说:"每天光整理这些单子就要两小时,还经常找不到历史记录。&q…...
Qt网格布局实战:从入门到精通
1. Qt网格布局基础入门 第一次接触Qt网格布局时,我完全被它的灵活性震惊了。想象一下Excel表格,每个单元格可以自由合并拆分,这就是QGridLayout给我的直观感受。作为Qt中最强大的布局管理器之一,它能够将界面元素精准地放置在网格…...
深夜告警炸裂?这份Linux故障排查“作战地图”请收好曰
先唠两句:参数就像餐厅点单 把API想象成一家餐厅的“后厨系统”。 ? 路径参数/dishes/{dish_id} -> 好比你要点“宫保鸡丁”这道具体的菜,它是菜单(资源路径)的一部分。查询参数/dishes?spicytrue&typeSichuan -> 好比…...
Spyglass CDC脚本实战:从环境配置到报告生成的完整流程解析
Spyglass CDC脚本实战:从环境配置到报告生成的完整流程解析 在数字芯片设计领域,时钟域交叉(CDC)问题一直是导致系统不稳定的重要因素之一。Spyglass作为业界广泛使用的静态验证工具,其CDC检查功能能够帮助工程师在早期…...
从Kvasir-SEG到临床辅助:基于U-Net的鼻息肉分割实战与调优
1. 医学图像分割的挑战与机遇 鼻息肉分割在临床诊断中具有重要意义,但传统的人工标注方式耗时耗力。作为一名长期从事医学影像分析的开发者,我深刻理解医生们面临的困境——每天需要处理大量影像数据,却缺乏高效精准的辅助工具。Kvasir-SEG数…...
临床医生也能懂的蛋白质组学:疾病标志物发现全流程解析
临床医生也能懂的蛋白质组学:疾病标志物发现全流程解析 在肝癌诊疗中,我们常遇到这样的困境:当超声发现肝脏占位时,患者往往已进入中晚期。而甲胎蛋白(AFP)作为传统标志物,其敏感性和特异性仅约…...
2026届毕业生推荐的AI写作神器横评
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 人工智能论文工具正渐渐变成学术写作方面极为重要的辅助办法,这般工具一般会整合…...
混合Copula模型(Clayton-Frank-Gumbel)代码深度解析与实战指南
混合copula 二维数据拟合得到相关结构参数与系数 主要针对常用的Clayton Frank Gumbel三种copula函数的组合,进行混合copula构建 Matlab代码实现一、代码定位与核心价值 1.1 应用场景 这套MATLAB代码专为二维变量依赖结构分析设计,核心应用于金融工程&am…...
LingBot-Depth在AR/VR中的应用:快速获取场景深度,开发更简单
LingBot-Depth在AR/VR中的应用:快速获取场景深度,开发更简单 1. AR/VR开发中的深度感知挑战 在增强现实(AR)和虚拟现实(VR)应用开发中,准确获取场景深度信息是核心技术挑战之一。传统深度获取方式通常面临以下问题: 硬件依赖&a…...
