Spring Boot AOP(五) 高级特性与源码实践

Spring Boot AOP(五) 高级特性与源码实践
博主社群介绍: ① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。 ② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。 ③ 群内也有职场精英,大厂大佬,跨国企业主管,可交流技术、面试、找工作的经验。 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬,进群赠送ZEEKLOG评论防封脚本,送真活跃粉丝,助你提升文章热度。 群公告里还有全网大赛约稿汇总/博客提效工具集/ZEEKLOG自动化运营脚本 有兴趣的加文末联系方式,备注自己的ZEEKLOG昵称,拉你进群,互相学习共同进步。 

文章目录


Spring Boot AOP(五) 高级特性与源码实践

1. 高级特性概述

在企业项目中,除了基础的注解切面,Spring AOP 还提供以下高级特性:

  • 自定义 Advisor:控制通知和切入点组合
  • 自定义 Pointcut:精确匹配方法
  • 自定义 Advice:实现特定逻辑,如限流、熔断、缓存
  • 自动代理装配流程:Spring 自动生成代理对象,织入切面
  • 多切面组合优化:控制顺序、重复切面处理

2. 自定义 Pointcut

Pointcut 决定哪些方法需要被切面处理。Spring 提供 StaticMethodMatcherPointcutDynamicMethodMatcherPointcut 供开发者自定义。

publicclassMyPointcutextendsStaticMethodMatcherPointcut{@Overridepublicbooleanmatches(Method method,Class<?> targetClass){return method.getName().startsWith("get");}}
  • 匹配所有以 get 开头的方法
  • 可以结合自定义 Advisor 使用

Mermaid 图:自定义 Pointcut 匹配流程

匹配

不匹配

扫描 Bean 方法

匹配自定义 Pointcut

应用 Advice

直接调用方法

方法执行 + 通知逻辑


3. 自定义 Advice

Advice 可以实现任意逻辑,只要实现 MethodInterceptor 接口即可。

publicclassMyAdviceimplementsMethodInterceptor{@OverridepublicObjectinvoke(MethodInvocation invocation)throwsThrowable{System.out.println("自定义通知前逻辑");Object result = invocation.proceed();System.out.println("自定义通知后逻辑");return result;}}
  • 结合自定义 Pointcut,可以形成 自定义 Advisor
  • 实现灵活的业务逻辑切面,例如限流、缓存、监控

4. 自定义 Advisor

Advisor 是 切入点 + 通知的组合。可以用 DefaultPointcutAdvisor 将自定义 Pointcut 和 Advice 绑定。

Pointcut pointcut =newMyPointcut();Advice advice =newMyAdvice();Advisor advisor =newDefaultPointcutAdvisor(pointcut, advice);
  • Advisor 可以加入到 ProxyFactory 生成代理对象
  • 支持排序,控制执行顺序

Mermaid 图:自定义 Advisor 执行流程

匹配

不匹配

方法调用

匹配自定义 Pointcut

调用自定义 Advice

执行目标方法

返回结果


5. 自动代理装配流程

Spring 自动将切面应用到 Bean 的核心流程:

  1. 扫描 Bean 定义,找到带 @Aspect 的类
  2. 将切面解析为 Advisor 列表
  3. 在 Bean 初始化后,判断是否需要代理
  4. 使用 ProxyFactoryCGLIB Enhancer 创建代理
  5. 将代理对象替换原 Bean 注入容器

Mermaid 图:自动代理装配流程

BeanDefinition 注册

实例化 Bean

依赖注入

postProcessBeforeInitialization

初始化方法

postProcessAfterInitialization

是否匹配切面?

创建 ProxyFactory

选择代理类型 JDK/CGLIB

生成代理对象

替换原 Bean 注入容器

直接返回 Bean


6. 高级实战示例:统一限流切面

@Aspect@ComponentpublicclassRateLimitAspect{privatefinalMap<String,AtomicInteger> counter =newConcurrentHashMap<>();@Around("@annotation(rateLimit)")publicObjectlimit(ProceedingJoinPoint pjp,RateLimit rateLimit)throwsThrowable{String key = pjp.getSignature().toShortString(); counter.putIfAbsent(key,newAtomicInteger(0));if(counter.get(key).incrementAndGet()> rateLimit.value()){thrownewRuntimeException("限流触发: "+ key);}try{return pjp.proceed();}finally{ counter.get(key).decrementAndGet();}}}
  • 利用自定义切面控制方法调用次数
  • 可以与事务、日志切面组合使用

Mermaid 图:限流切面执行链

未超限

超限

方法调用

RateLimitAspect 环绕通知前逻辑

检查调用次数

执行目标方法

抛出异常

环绕通知后逻辑

返回调用方


7. 多 Advisor + 自动代理组合

  • 自动扫描多个 @Aspect
  • 将所有 Advisor 按顺序加入 ProxyFactory
  • 调用链统一管理 MethodInterceptor,支持环绕、前置、后置、异常通知

客户端调用

LoggingAspect @Before

TransactionAspect @Around 前

RateLimitAspect @Around 前

目标方法执行

RateLimitAspect @Around 后

TransactionAspect @Around 后提交/回滚

LoggingAspect @AfterReturning

返回客户端


8. 小结

  • Spring AOP 高级特性允许 自定义 Advisor、Pointcut、Advice,实现复杂业务切面
  • 自动代理装配由 AnnotationAwareAspectJAutoProxyCreator + ProxyFactory 完成
  • 多切面组合执行顺序由 @OrderOrdered 接口控制
  • Mermaid 流程图清晰展示了自定义切面 + 自动代理 + 多通知组合执行链
  • 这些高级特性在企业项目中用于 统一日志、限流、缓存、事务控制,保持代码整洁与可维护性

结束语

👨‍💻 关于我

持续学习 | 追求真我

如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的。想看更多 那就点个关注吧 我会尽力带来有趣的内容 😎。

感谢订阅专栏 三连文章

image-20251011155556997

掘金点击访问QiunerZEEKLOG点击访问QiunerGitHub点击访问QiunerGitee点击访问Qiuner

专栏简介
📊 一图读懂系列图文并茂,轻松理解复杂概念
📝 一文读懂系列深入浅出,全面解析技术要点
🌟持续更新保持学习,不断进步
🎯 人生经验经验分享,共同成长
你好,我是Qiuner. 为帮助别人少走弯路而写博客

如果本篇文章帮到了你 不妨点个吧~ 我会很高兴的 😄 (^ ~ ^) 。想看更多 那就点个关注吧 我会尽力带来有趣的内容 😎。

代码都在Github或Gitee上,如有需要可以去上面自行下载。记得给我点星星哦😍

如果你遇到了问题,自己没法解决,可以去我掘金评论区问。ZEEKLOG评论区和私信消息看不完 掘金消息少一点.
上一篇推荐链接
Java程序员快又扎实的学习路线点击该处自动跳转查看哦
一文读懂 AI点击该处自动跳转查看哦
一文读懂 服务器点击该处自动跳转查看哦
2024年创作回顾点击该处自动跳转查看哦
一文读懂 ESLint配置点击该处自动跳转查看哦
老鸟如何追求快捷操作电脑点击该处自动跳转查看哦
未来会写什么文章?预告链接
一文读懂 XX?点击该处自动跳转查看哦
2025年终总结点击该处自动跳转查看哦
一图读懂 XX?点击该处自动跳转查看哦

Read more

【花雕学编程】Arduino BLDC 之离线语音模块智能控制机器人

【花雕学编程】Arduino BLDC 之离线语音模块智能控制机器人

基于 Arduino 的无刷直流电机(BLDC)离线语音模块智能控制机器人,是一种将嵌入式语音识别技术与高效电机控制深度融合的独立式智能系统。该机器人通过本地化的语音处理单元,实现对 BLDC 执行机构的直接指令控制,摆脱了对云端服务器或外部网络的依赖。这种架构不仅保障了控制的实时性与隐私安全,也极大地拓展了人机交互的便捷性。 1、主要特点 本地化语音处理与隐私安全 这是该系统的核心优势,所有的语音信号处理与指令识别均在本地硬件上完成。 数据隐私保护: 语音数据无需上传至互联网,完全在本地闭环处理,从根本上杜绝了用户语音隐私泄露的风险,符合高安全等级应用的需求。 超低延迟响应: 省去了网络传输、云端服务器排队和数据回传的时间,指令识别的响应速度极快(通常在 100ms 级别)。这种即时性对于控制高速运转的 BLDC 电机至关重要,确保了操作的流畅性和安全性。 离线独立运行: 系统不依赖 Wi-Fi 或蓝牙等通信链路,即使在网络信号差或无网络的环境下(如地下室、封闭车间),依然能稳定工作,系统鲁棒性极强。 高保真语音识别与指令集管理 离线语音模块通常采用专用的 DSP 或低功耗 AI

By Ne0inhk
【嵌入式硬件】FPGA开发从入门到精通

【嵌入式硬件】FPGA开发从入门到精通

目录 一、FPGA 是什么 二、学习前的准备 (一)硬件准备 (二)软件准备 三、基础知识入门 (一)数字电路基础回顾 (二)Verilog HDL 语言基础 四、FPGA 开发流程实战 (一)创建工程 (二)编写代码 (三)综合与实现 (四)仿真验证 (五)下载与调试 五、学习资源推荐 (一)书籍 (二)在线课程 (三)论坛和博客 六、总结与展望 一、FPGA 是什么 FPGA,即现场可编程门阵列(Field-Programmable Gate Array) ,是一种可编程逻辑器件。

By Ne0inhk
AiOnly大模型深度测评:调用GPT-5 API+RAG知识库,快速构建智能客服机器人

AiOnly大模型深度测评:调用GPT-5 API+RAG知识库,快速构建智能客服机器人

声明:本测试报告系作者基于个人兴趣及使用场景开展的非专业测评,测试过程中所涉及的方法、数据及结论均为个人观点,不代表任何官方立场或行业标准。 引言 AI 技术加速渗透各行各业的今天,你是否也面临这样的困境:想调用 GPT-5、Claude4.5等顶尖模型却被海外注册、跨平台适配搞得焦头烂额?想快速搭建智能客服、内容生成工具,却因模型接口差异、成本不可控而望而却步?或是作为中小团队,既想享受 AI 红利,又受限于技术门槛和预算压力? AiOnly平台的出现,正是为了打破这些壁垒。 本文将从实战角度出发,带你全方位解锁这个「全球顶尖大模型 MaaS 平台」:从 5 分钟完成注册到 API 密钥创建,从单模型调用到融合 RAG 知识库的智能体开发,然后手把手教你在 Windows 环境部署一个日均成本不足 0.5 元的电商客服机器人。无论你是 AI 开发者、企业运营者,还是想低成本尝试 AI

By Ne0inhk
Flutter 三方库 bavard 的鸿蒙化适配指南 - 实现语义化的聊天消息协议、支持机器人自动回复逻辑与分布式通讯元数据封装

Flutter 三方库 bavard 的鸿蒙化适配指南 - 实现语义化的聊天消息协议、支持机器人自动回复逻辑与分布式通讯元数据封装

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 bavard 的鸿蒙化适配指南 - 实现语义化的聊天消息协议、支持机器人自动回复逻辑与分布式通讯元数据封装 前言 在进行 Flutter for OpenHarmony 的社交或客户支持类应用开发时,除了核心的 WebSocket 传输,如何规范化定义“消息(Message)”的数据结构以及处理复杂的对话逻辑状态,往往决定了项目的后期维护性。bavard 是一个专为高度语义化聊天交互设计的协议封装库。它能让你在鸿蒙端以极具逻辑感的对象模型来驱动对话流。本文将带大家了解如何利用 bavard 构建标准化的聊天架构。 一、原理解析 / 概念介绍 1.1 基础原理 bavard 将一次对话拆解为“参与者(Participants)”、“话题(Topics)”和“原子消息(Discrete Messages)”。它提供了一套完整的状态机,用于驱动从“

By Ne0inhk