Spring Advisor增强规则实现原理介绍

article/2025/7/13 8:18:58

Spring Advisor增强规则实现原理介绍

    • 一、什么是 Advisor?
      • 1. Advisor 的定义与本质
        • 接口定义:
      • 2. Advisor 的核心作用
        • 统一封装切点与通知
        • 构建拦截器链的基础
        • 实现增强逻辑的灵活组合
    • 二. Sprin当中的实现逻辑
        • 1 `Advisor` 接口定义
        • 2 `PointcutAdvisor` 接口定义
        • 3 `AspectJExpressionPointcutAdvisor` 实现类

源码见:mini-spring

在这里插入图片描述

一、什么是 Advisor?

参考:AOP相关核心概念与作用说明(补充)

1. Advisor 的定义与本质

Advisor(顾问)是 Spring AOP 提供的一个接口,用于封装以下两部分内容:

  • Advice:增强逻辑,即实际执行的横切代码。

  • Pointcut:切点逻辑,定义增强逻辑在哪些连接点(方法)生效。

通俗来说,Advisor = Advice + Pointcut

这种设计让 Spring AOP 框架可以通过统一的方式处理各种通知类型(如前置、后置、环绕等)。

接口定义:
public interface Advisor {Advice getAdvice();
}

当一个 Advisor 同时包含切点信息时,会实现其子接口 PointcutAdvisor

public interface PointcutAdvisor extends Advisor {Pointcut getPointcut(); // 获取切点定义
}

2. Advisor 的核心作用

统一封装切点与通知

在 Spring AOP 中,大量组件实现了 Advisor 接口。通过这一统一抽象,框架无需区分通知类型(如 BeforeAdvice / AfterAdvice),可以统一处理逻辑。

构建拦截器链的基础

Spring AOP 在执行代理方法时会构建一个拦截器链(interceptor chain),每个 Advisor 都会被包装为 MethodInterceptor 插入到链中。只有切点匹配的 Advisor 才会生效。

实现增强逻辑的灵活组合

多个 Advisor 可以作用于同一个目标类,实现增强逻辑的灵活组合和动态添加,具有良好的扩展性和可插拔性。

简而言之,Advisor 就是 Spring AOP 中的“顾问”,它告诉框架:
在哪些地方执行什么增强逻辑


二. Sprin当中的实现逻辑

1 Advisor 接口定义
/*** 顾问接口:封装一个 Advice(通知逻辑)* 不关注切点,适用于全局增强逻辑* * @author jixu* @date 2025/5/27*/
public interface Advisor {/*** 获取通知逻辑对象*/Advice getAdvice();
}

2 PointcutAdvisor 接口定义
/*** 切点顾问接口:封装 Advice + Pointcut* 常用于需要指定增强位置的通知(如方法级别拦截)* * @author jixu* @date 2025/5/27*/
public interface PointcutAdvisor extends Advisor {/*** 获取切点定义*/PointCut getPointcut();
}

3 AspectJExpressionPointcutAdvisor 实现类
/*** 基于 AspectJ 表达式的切点顾问实现* 封装了一个切点表达式(Pointcut)和对应的通知(Advice)* * 用于将 Pointcut + Advice 组合成统一 Advisor 结构* * @author jixu* @date 2025/5/27*/
public class AspectJExpressionPointcutAdvisor implements PointcutAdvisor {private Advice advice;            // 通知逻辑private PointCut pointcut;        // 切点对象private String expression;        // 切点表达式public AspectJExpressionPointcutAdvisor() {}@Overridepublic PointCut getPointcut() {if (this.pointcut == null) {this.pointcut = new AspectJExpressionPointcut(expression);}return this.pointcut;}@Overridepublic Advice getAdvice() {return this.advice;}public void setAdvice(Advice advice) {this.advice = advice;}public void setExpression(String expression) {this.expression = expression;}
}
组件作用
Advice具体的增强逻辑,如日志打印、事务控制
Pointcut定义哪些连接点需要增强
Advisor封装 Advice 和 Pointcut,统一 AOP 调度入口
PointcutAdvisor可匹配特定方法的 Advisor
AspectJExpressionPointcutAdvisor结合 AspectJ 表达式生成动态切点

通过将 Advice 与 Pointcut 封装为 Advisor,Spring AOP 实现了 增强逻辑的统一管理、动态匹配与链式组合,是整个框架的重要基础构件。


http://www.hkcw.cn/article/tKYNbhXkKE.shtml

相关文章

vscode实时预览编辑markdown

vscode实时预览编辑markdown 点击vsode界面,实现快捷键如下: 按下快捷键 CtrlShiftV(Windows/Linux)或 CommandShiftV(Mac)即可在侧边栏打开 Markdown 预览。 效果如下:

为什么建立 TCP 连接时,初始序列号不固定?

主要原因有两个方面: 很大程度上避免历史报文被下一个相同四元组的 TCP 连接接收问题(主要方面)防止黑客伪造相同序列号的 TCP 报文被接收 接下来,详细说说第一点 假设每次建立 TCP 连接时,客户端和服务端的初始序列…

偏序集、哈斯图、Dilworth

标题 偏序哈斯图Dilworth最少的不上升子序列与最长上升子序列P1020 偏序 偏序关系满足&#xff1a;自反性、反对称性和传递性 便于理解引入哈斯图 哈斯图 对于元素 x&#xff0c;如果 x<y 且不存在 z 使得 x<z<y&#xff0c;那么 y 就是 x 的覆盖元素&#xff0c;在…

企业知识库问答系统避坑指南:检索优化与生成一致性解决方案

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 一、智能问答系统架构设计 1.1 整体系统架构 graph LR A[用户输入] --> B(前端界面) B --> C{查询类型} C -->|文本| D[文本处理模块] C -…

2025年全国青少年信息素养大赛复赛C++算法创意实践挑战赛真题模拟强化训练(3)

2025年全国青少年信息素养大赛复赛C算法创意实践挑战赛真题模拟强化训练&#xff08;3&#xff09; 四位数密码 【题目描述】 情报员使用4位数字来传递信息&#xff0c;同时为了防止信息泄露&#xff0c;需要将数字进行加密。数据加密的规则是: 每个数字都进行如下处理&…

爬虫知识零基础到入门-数据解析-css, xpath(三)

数据解析 前言一、常见数据类型1.结构化数据2.半结构化数据3.非结构化数据二、HTML概述1.HTML骨架格式2.HTML标签关系三、CSS选择器1.标签选择器2.类选择器3.ID选择器4.组合选择器5.后代选择器6.伪类选择器7.属性提取器8.小结四、xpath节点提取1.什么是xpath2.认识xml1.html和x…

56、Ocelot 概述

Ocelot 是一个基于 .NET Core 开发的开源 API 网关&#xff0c;主要用于微服务架构中&#xff0c;为多个后端服务提供统一的访问入口。它通过集中化管理请求路由、认证、限流、负载均衡等功能&#xff0c;简化了客户端与后端服务之间的交互&#xff0c;同时增强了系统的安全性和…

使用el-input数字校验,输入汉字之后校验取消不掉

先说说复现方式 本来input是只能输入数字的&#xff0c;然后你不小心输入了汉字&#xff0c;触发校验了&#xff0c;然后这时候&#xff0c;你发现校验取消不掉了 就这样了 咋办啊&#xff0c;你一看校验没错啊&#xff0c;各种number啥的也写了,发现没问题啊 <el-inputv…

Oracle数据库性能优化的最佳实践

原创&#xff1a;厦门微思网络 以下是 Oracle 数据库性能优化的最佳实践&#xff0c;涵盖设计、SQL 优化、索引管理、系统配置等关键维度&#xff0c;帮助提升数据库响应速度和稳定性&#xff1a; 一、SQL 语句优化 1. 避免全表扫描&#xff08;Full Table Scan&#xff09;…

AR-HUD 光波导方案优化难题待解?OAS 光学软件来破局

波导-HUD系统案例分析 简介 光波导技术凭借其平板超薄结构和强大的二维扩展能力&#xff0c;在解决AR-HUD问题方面展现出显著优势。一方面&#xff0c;其独特的结构特性能够大幅减小对光机体积的需求&#xff0c;成为 HUD 未来发展的重要技术方向&#xff1b;另一方面&#xf…

003图书个性化推荐系统技术剖析:打造智能借阅新体验

图书个性化推荐系统技术剖析&#xff1a;打造智能借阅新体验 在知识经济时代&#xff0c;图书资源日益丰富&#xff0c;如何帮助用户快速找到心仪的图书成为关键。图书个性化推荐系统应运而生&#xff0c;它集成图书信息管理、图书预约等多个核心模块&#xff0c;通过前台展示…

CUDA 实践:隐式 GEMM 卷积 | CUDA

文章写的通俗易懂&#xff0c;根据学习和理解&#xff0c;这里画图更又利于理解。 img2col GEMM 是一种比较常用的卷积优化方法&#xff0c;因为这样可以利用到性能已经优化得比较好的 BLAS 库。早期的一些深度学习框架&#xff08;如 Caffe&#xff09;就是用了这种方式。但…

Linux线程池(下)(34)

文章目录 前言一、v3版本二、单例模式概念特点简单实现 三、其余问题STL线程安全问题智能指针线程安全问题其他锁的概念 总结 前言 加油&#xff01;&#xff01;&#xff01; 一、v3版本 「优化版」&#xff1a;从任务队列入手&#xff0c;引入 「生产者消费者模型」&#xff…

Vert.x学习笔记-EventLoop工作原理

Vert.x学习笔记 Vert.x Event Loop 的工作原理1. 核心设计理念2. 事件循环的执行流程3. 线程绑定与上下文4. 协作与任务委托5. 性能优化与注意事项6. 关键特性总结 单线程事件循环&#xff08;Event Loop&#xff09;1. 什么是单线程事件循环&#xff1f;2. 用生活场景类比3. 单…

基于 HT for Web 的轻量化 3D 数字孪生数据中心解决方案

一、技术架构&#xff1a;HT for Web 的核心能力 图扑软件自主研发的 HT for Web 是基于 HTML5 的 2D/3D 可视化引擎&#xff0c;核心技术特性包括&#xff1a; 跨平台渲染&#xff1a;采用 WebGL 技术&#xff0c;支持 PC、移动端浏览器直接访问&#xff0c;兼容主流操作系统…

德国或将对美国科技巨头征收10%数字税

当地时间5月30日,新一届德国政府刚刚设立的联邦数字化与现代化部议会国务秘书菲利普阿姆托尔表示,尽管存在加剧与美国贸易紧张局势的风险,但德国仍在考虑对美国科技巨头征收10%的数字税。阿姆托尔表示,包括谷歌母公司“字母表”“元”公司等在内的美国多家大型科技巨头在德…

【航天远景 MapMatrix 精品教程】08 Pix4d空三成果导入MapMatrix

【航天远景 MapMatrix 精品教程】08 Pix4d空三成果导入MapMatrix 文章目录 【航天远景 MapMatrix 精品教程】08 Pix4d空三成果导入MapMatrix一、资料准备1.去畸变影像2.相机文件3.外方位元素二、创建工程1.新建工程2.导入照片3.编辑相机文件4.编辑外方位元素文件,导入外方位元…

【JavaWeb】JSP

目录 8. JSP8.1 什么是JSP8.2 JSP原理8.3 JSP基础语法8.4 JSP指令8.5 九大内置对象8.6 JSP标签、JSTL标签、EL表达式8.6.1 JSP标签&#xff08;JSP Actions&#xff09;定义&#xff1a;常见标签&#xff1a;示例代码&#xff1a;注意事项&#xff1a; 8.6.2 EL 表达式&#xf…

中国区域每月地下水水位栅格数据集(2005-2022)

时间分辨率&#xff1a;月空间分辨率&#xff1a;1km - 10km共享方式&#xff1a;开放获取数据大小&#xff1a;8.52 GB数据时间范围&#xff1a;2005-01-01 — 2022-12-01元数据更新时间&#xff1a;2024-09-09 数据集摘要 数据集“GWs_cn_1km”提供了2005年至2022年中国区域…

哪些岗位最易被AI替代?

随着AI技术高速演进&#xff0c;一场“职场大洗牌”正悄然上演。当ChatGPT出口成章、机器人能精准执勤&#xff0c;AI时代的“就业焦虑”已不再是空谈。你是否认真思考过&#xff0c;自己所处的岗位是否也正面临被AI边缘化的风险&#xff1f; 以下几类职业&#xff0c;已成为AI…