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

人工智能:多模态大模型原理与跨模态应用实战

人工智能:多模态大模型原理与跨模态应用实战

人工智能:多模态大模型原理与跨模态应用实战 1.1 本章学习目标与重点 💡 学习目标:掌握多模态大模型的核心原理、跨模态特征融合方法,以及基于多模态模型的图文生成与理解任务实战流程。 💡 学习重点:理解多模态模型的架构设计,学会使用 Hugging Face 生态工具调用 CLIP 与 BLIP-2 模型,完成图文检索与图像描述生成任务。 1.2 多模态大模型的核心概念与发展背景 1.2.1 什么是多模态大模型 💡 多模态大模型是指能够同时处理文本、图像、音频、视频等多种不同类型数据的人工智能模型。它打破了传统单模态模型的信息壁垒,实现了跨模态的理解与生成。 多模态大模型的核心能力体现在两个方面: * 跨模态理解:实现不同模态数据之间的关联分析,例如根据文本描述查找对应图像、根据图像内容生成文字摘要。 * 跨模态生成:以一种模态数据为输入,生成另一种模态的数据,例如文本生成图像、图像生成文本、语音生成视频等。 与单模态大模型相比,多模态大模型更贴近人类的认知方式。人类在认识世界的过程中,本身就是通过视觉、听觉、语言等多种感官渠道接收和处理信息的。

By Ne0inhk

AI风口劝退指南:为什么99%的普通人不该盲目追AI?理性入局的完整路径与实战建议(2026深度解析)

AI风口劝退指南:为什么99%的普通人不该盲目追AI?理性入局的完整路径与实战建议(2026深度解析) 摘要: 2026年,AI大模型热潮持续升温,但“全民学AI”的背后,是大量非科班、无基础、资源匮乏者陷入时间、金钱与心理的三重亏损。本文从认知偏差、能力错配、资源垄断、职业断层、教育泡沫五大维度,系统剖析为何多数人不应盲目追逐AI风口,并提供一条分阶段、可落地、高性价比的理性参与路径。全文包含技术原理详解、真实失败案例、实用代码示例、调试技巧及职业规划建议,全文约9800字,适合所有对AI感兴趣但尚未入局、或已深陷焦虑的技术爱好者阅读。 一、引言:当“AI=财富自由”成为时代幻觉 2026年3月,某技术论坛上一则帖子引发广泛共鸣: “辞职三个月,每天16小时啃《深度学习》《Attention Is All You Need》,结果连Hugging Face的Trainer都配置失败。存款耗尽,

By Ne0inhk
移动端也能玩转!OpenClaw iOS/Android 端部署教程,语音唤醒 + 全场景随身 AI 助手

移动端也能玩转!OpenClaw iOS/Android 端部署教程,语音唤醒 + 全场景随身 AI 助手

一、背景与价值:随身AI助手的刚需场景 随着大语言模型技术的普及,全场景AI助手的需求日益增长——无论是通勤途中的语音笔记、户外场景的实时翻译,还是离线环境下的知识查询,移动端随身AI都能解决传统桌面AI的场景局限。OpenClaw作为一款轻量级、可离线运行的开源AI框架,支持语音唤醒、多模态交互等核心功能,完美适配iOS/Android双平台部署,为用户打造真正的随身AI助手。 二、核心原理:OpenClaw移动端部署的技术逻辑 OpenClaw的移动端部署核心是将轻量化大语言模型(如Qwen-2-0.5B-Instruct)、语音唤醒模型(如PicoVoice Porcupine)与移动端推理引擎(如MLKit、TensorFlow Lite)进行整合,实现三大核心流程: 1. 低功耗语音唤醒:通过本地运行的轻量唤醒模型监听关键词,避免持续调用麦克风导致的高功耗; 2. 本地推理加速:利用移动端硬件加速(NNAPI、Core ML)运行量化后的大语言模型,实现离线交互; 3. 跨平台适配:通过Flutter或React Native统一代码底座,同时适配iOS的沙箱

By Ne0inhk
HarmonyOS6 半年磨一剑:RcTag 组件实战案例(一)内容展示与商品筛选

HarmonyOS6 半年磨一剑:RcTag 组件实战案例(一)内容展示与商品筛选

文章目录 * 一、场景一:内容详情页标签展示 * 1.1 场景描述 * 1.2 设计思路 * 1.3 完整代码 * 1.4 代码详解 * 二、场景二:商品分类筛选 * 2.1 场景描述 * 2.2 设计思路 * 2.3 完整代码 * 2.4 代码详解 * 总结 Hello 各位开发者们大家好,我是若城,本篇是 RcTag 实战系列的第一篇文章,将通过两个真实业务场景,展示如何用 RcTag 构建内容详情页标签区域和电商商品分类筛选功能。 一、场景一:内容详情页标签展示 1.1 场景描述 文章详情页顶部展示文章分类标签、内容标签和难度标签,

By Ne0inhk