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

SpringBoot AOP切面编程精讲:实现方式、Spring区别及与自定义注解生产实战

文章目录一、AOP核心简介二、SpringBoot快速实现AOP注解版1. 引入核心依赖2. 编写切面类五种通知完整示例3. 测试接口4. 通知执行顺序三、传统Spring AOP vs SpringBoot AOP核心区别1. 核心差异汇总四、SpringBoot AOP切面 vs 自定义注解生产重点1. 核心关系2. 两种方式对比五、实战1纯AOP全局拦截仅演示不推荐生产六、实战2AOP自定义注解生产标准写法1. 创建自定义标记注解2. 切面拦截该注解3. 业务接口按需使用七、最终生产总结一、AOP核心简介AOP面向切面编程是Spring两大核心之一核心作用就是不改动业务代码就能对方法做统一增强实现业务逻辑与公共逻辑解耦。常用于统一日志、接口耗时统计、权限校验、事务管理、操作记录等场景。核心四要素切点要拦截哪些方法、切面增强处理类、通知前后/环绕/异常等增强逻辑、连接点被拦截的目标方法。二、SpringBoot快速实现AOP注解版1. 引入核心依赖SpringBoot无需繁琐配置仅需引入AOP启动器自动完成装配。!-- SpringBoot AOP核心依赖 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId/dependency2. 编写切面类五种通知完整示例Aspect标记切面类Component交给容器管理通过切点匹配目标方法配置不同通知完成增强。importorg.aspectj.lang.ProceedingJoinPoint;importorg.aspectj.lang.annotation.*;importorg.springframework.stereotype.Component;AspectComponentpublicclassLogAndTimeAspect{// 切点拦截controller包下所有方法Pointcut(execution(* com.example.demo.controller.*.*(..)))publicvoidcontrollerPointCut(){}// 前置通知方法执行前Before(controllerPointCut())publicvoidbeforeAdvice(){System.out.println(【前置通知】方法开始执行);}// 后置通知无论是否异常执行完毕都执行After(controllerPointCut())publicvoidafterAdvice(){System.out.println(【后置通知】方法执行结束);}// 返回通知方法正常返回后执行AfterReturning(pointcutcontrollerPointCut(),returningresult)publicvoidafterReturningAdvice(Objectresult){System.out.println(【返回通知】返回值result);}// 异常通知方法报错时执行AfterThrowing(pointcutcontrollerPointCut(),throwinge)publicvoidafterThrowingAdvice(Exceptione){System.out.println(【异常通知】异常信息e.getMessage());}// 环绕通知功能最强手动控制方法执行前后逻辑Around(controllerPointCut())publicObjectaroundAdvice(ProceedingJoinPointjoinPoint)throwsThrowable{longstartTimeSystem.currentTimeMillis();// 执行目标方法ObjectresultjoinPoint.proceed();longendTimeSystem.currentTimeMillis();System.out.println(【环绕通知】方法耗时(endTime-startTime)ms);returnresult;}}3. 测试接口RestControllerpublicclassAopTestController{GetMapping(/aop/test)publicStringaopTest(){System.out.println(业务方法执行中);returnAOP执行成功;}}4. 通知执行顺序正常执行环绕前置 → 前置通知 → 目标方法 → 返回通知 → 后置通知 → 环绕后置。异常执行环绕前置 → 前置通知 → 方法报错 → 异常通知 → 后置通知。三、传统Spring AOP vs SpringBoot AOP核心区别两者底层原理、切点规则、通知逻辑完全一样核心区别仅在配置和使用方式。1. 核心差异汇总配置方式Spring AOP必须写XML配置繁琐冗余SpringBoot AOP零XML纯注解开箱即用。依赖管理Spring需手动导入多个Jar、处理版本冲突SpringBoot只需一个启动器自动管控版本。代理开启Spring需手动配置AOP自动代理标签SpringBoot默认自动开启无需手动配置。适用场景Spring AOP仅用于老旧SSM项目维护SpringBoot AOP是新项目、微服务标配。四、SpringBoot AOP切面 vs 自定义注解生产重点1. 核心关系AOP切面干活的拦截器负责方法增强逻辑自定义注解标记开关只负责筛选哪些方法需要拦截。两者不是二选一生产标配AOP切面 自定义注解组合使用。2. 两种方式对比对比维度纯AOP按包名拦截executionAOP自定义注解精准拦截拦截范围全局批量拦截范围大只拦截加注解的方法精准可控误拦截风险高容易拦截无关方法无不加注解不生效适用场景全局耗时、基础统一日志操作日志、权限、限流、数据脱敏生产推荐少用、不推荐首选、企业标准五、实战1纯AOP全局拦截仅演示不推荐生产按包名一刀切所有接口都拦截无法单独控制容易产生垃圾日志。AspectComponentpublicclassAllApiLogAspect{Pointcut(execution(* com.example.demo.controller.*.*(..)))publicvoidpointcut(){}Around(pointcut())publicObjectaround(ProceedingJoinPointjoinPoint)throwsThrowable{System.out.println(接口入参Arrays.toString(joinPoint.getArgs()));ObjectresultjoinPoint.proceed();System.out.println(接口出参result);returnresult;}}六、实战2AOP自定义注解生产标准写法1. 创建自定义标记注解importjava.lang.annotation.*;// 仅标记方法、运行时生效Target(ElementType.METHOD)Retention(RetentionPolicy.RUNTIME)DocumentedpublicinterfaceOperateLog{Stringvalue()default;// 记录操作描述}2. 切面拦截该注解AspectComponentpublicclassOperateLogAspect{// 只拦截加了OperateLog注解的方法Pointcut(annotation(com.example.demo.annotation.OperateLog))publicvoidoperateLogPointcut(){}Around(operateLogPointcut())publicObjectaround(ProceedingJoinPointjoinPoint)throwsThrowable{System.out.println( 记录重要操作日志 );System.out.println(操作方法joinPoint.getSignature().getName());System.out.println(请求参数Arrays.toString(joinPoint.getArgs()));ObjectresultjoinPoint.proceed();System.out.println(操作返回结果result);returnresult;}}3. 业务接口按需使用RestControllerpublicclassUserController{// 普通查询不加注解 → 不记录日志GetMapping(/user/get)publicStringgetUser(){return查询用户;}// 重要操作加注解 → AOP自动记录日志OperateLog(删除用户操作)GetMapping(/user/delete)publicStringdeleteUser(){return删除成功;}}七、最终生产总结简单全局通用功能可少量使用纯AOP包名拦截业务特殊增强功能一律使用AOP自定义注解精准可控、好维护SpringBoot新项目只用注解AOP传统Spring XML配置仅作老旧项目维护使用。

相关文章:

SpringBoot AOP切面编程精讲:实现方式、Spring区别及与自定义注解生产实战

文章目录一、AOP核心简介二、SpringBoot快速实现AOP(注解版)1. 引入核心依赖2. 编写切面类(五种通知完整示例)3. 测试接口4. 通知执行顺序三、传统Spring AOP vs SpringBoot AOP核心区别1. 核心差异汇总四、SpringBoot AOP切面 vs…...

告别纸上谈兵:在浏览器里用MARIE.js写你的第一个汇编程序(含完整代码)

在浏览器中探索汇编语言:用MARIE.js编写你的第一个程序 记得第一次接触编程时,我盯着屏幕上闪烁的光标,敲下了人生中第一个"Hello World"。那种从无到有的创造感令人着迷。今天,我们要回到编程的起点——汇编语言&…...

别再只用WebRTC了!用LiveKit Server + Go 手把手搭建一个低延迟的Web音视频聊天室

别再只用WebRTC了!用LiveKit Server Go 手把手搭建一个低延迟的Web音视频聊天室 实时音视频通信已经成为现代Web应用的核心功能之一。从在线教育到远程医疗,从社交应用到协同办公,低延迟、高可靠的音视频传输能力正在重塑我们的数字交互方式…...

Notepad--:跨平台国产文本编辑器的完整指南与高效使用技巧

Notepad--:跨平台国产文本编辑器的完整指南与高效使用技巧 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器,目标是做中国人自己的编辑器,来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad-- …...

从‘电容泵水’到稳定供电:手把手分析电荷泵的三种电路拓扑(倍压、稳压、反压)

从‘电容泵水’到稳定供电:电荷泵电路实战全解析 引言:重新认识电荷泵的价值 第一次在示波器上看到电荷泵将3.3V电压稳稳提升到5V时,那种感觉就像魔术师从空帽子里变出鸽子。这种看似简单的电路拓扑,却能在没有传统电感的支持下完…...

从硬件拓扑到软件调度:深入理解NUMA如何影响你的MySQL/Redis性能

从硬件拓扑到软件调度:深入理解NUMA如何影响你的MySQL/Redis性能 在部署高性能数据库时,你是否遇到过这样的场景:服务器配置豪华——顶级CPU、充足内存、NVMe固态硬盘,但MySQL查询响应时间却忽高忽低,Redis的99线延迟时…...

十个超推荐的AI相关工具和网站

很多人用AI,只知道 ChatGPT、Claude、Gemini 这些大模型本体。 但真正把 AI 用得顺手的人,都有一套围绕大模型搭建起来的「工具链」—— 用来接入、管理、开发、创作、发现。 今天分享 10 个我强烈推荐的AI相关工具和网站。它们不是大模型,但…...

把1500个业务的大迁移,做成了可复用流水线用 Skill+Agent+Rule,省下 60 人年的实战复盘

当AI自我感觉良好地宣告零错误,并差点因此搞崩整个平台时,我意识到必须给它装上一个‘安检机’。你有没有过这种经历? 老板甩给你一个大项目:1500 个业务,要从旧平台迁到新平台,时间线“越快越好”。 你打开…...

NCC方法解决LLM标签长度偏差问题

1. 问题背景与NCC方法概述在大语言模型(LLM)的实际应用中,我们经常遇到一个棘手的问题:模型对长标签和短标签的处理存在明显偏差。就像用同一把尺子测量蚂蚁和大象,结果往往失真。这种标签长度偏差(Label L…...

告别重复介绍!你的专属AI伙伴终于来了

它有一套自己的记忆系统,能记住你的设定、档案、长期记忆和经验技巧,从此你再也不用反复向AI做自我介绍了。不知道你有没有过这种体验: 每次用 AI 工具,都要从头开始介绍自己? “我是互联网运营,我们公司做…...

python学习Day12:pandas安装与实际运用

第12天:实际应用——pandas入门哈喽,小伙伴们,今天我们需要安装python中的插件:pandas,并且学会简单运用阶段:实际应用学习内容:pandas 入门核心知识点:读取数据1. 什么是 pandas&am…...

用两块ESP32玩转蓝牙:手把手搭建双向数据透传系统(基于ESP-IDF GATT例程)

用两块ESP32玩转蓝牙:手把手搭建双向数据透传系统(基于ESP-IDF GATT例程) 在物联网开发中,蓝牙低功耗(BLE)技术因其低功耗、低成本的特点,成为设备间短距离通信的首选方案之一。ESP32作为一款集…...

从游戏手柄到机器人遥控:手把手教你用PS2手柄和STM32F4做个无线小车控制器

从游戏手柄到机器人遥控:手把手教你用PS2手柄和STM32F4做个无线小车控制器 周末整理房间时翻出一个落灰的PS2手柄,突然想到能不能用它来控制我的机器人小车?这个灵感冒出来后,我立刻翻出吃灰的STM32F4开发板,开始了这个…...

REPENTOGON终极安装指南:快速上手以撒的脚本扩展器

REPENTOGON终极安装指南:快速上手以撒的脚本扩展器 【免费下载链接】REPENTOGON Script extender for The Binding of Isaac: Repentance 项目地址: https://gitcode.com/gh_mirrors/re/REPENTOGON 你是否渴望为《以撒的结合:忏悔》注入全新的生命…...

通过curl命令直接测试Taotoken聊天补全接口的完整步骤

通过curl命令直接测试Taotoken聊天补全接口的完整步骤 1. 准备工作 在开始使用curl测试Taotoken聊天补全接口前,需要确保已具备以下条件: 有效的Taotoken API Key,可在Taotoken控制台的API Key管理页面创建。目标模型ID,可在Ta…...

APKMirror:安全可靠的安卓APK下载管理工具

APKMirror:安全可靠的安卓APK下载管理工具 【免费下载链接】APKMirror 项目地址: https://gitcode.com/gh_mirrors/ap/APKMirror APKMirror是一款专为安卓用户设计的第三方客户端应用,它通过简洁的Material Design界面和高效的功能设计&#xff…...

WorkshopDL深度解析:无需Steam客户端的跨平台创意工坊下载器技术实践

WorkshopDL深度解析:无需Steam客户端的跨平台创意工坊下载器技术实践 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 对于游戏开发者和模组爱好者来说,S…...

武大计算机复试机考环境全揭秘:Dev-C++、PyCharm、VSCode,哪个才是你的菜?

武大计算机复试机考环境全揭秘:Dev-C、PyCharm、VSCode实战指南 走进武汉大学计算机复试机房,面对屏幕上预装的多个IDE图标,不少考生会陷入选择困难。Dev-C的复古界面、PyCharm的专业感、VSCode的极简风格,每个工具都有其独特的操…...

Nucleus Co-Op终极指南:单机游戏变身多人同屏的神奇魔法

Nucleus Co-Op终极指南:单机游戏变身多人同屏的神奇魔法 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 想象一下这样的场景&#xff1…...

紧急!等保2.0三级系统国密改造卡在性能关?这份Python SM2/SM4并发压测逃生手册请立刻保存

更多请点击: https://intelliparadigm.com 第一章:国密算法性能瓶颈的底层归因与破局逻辑 国密算法(如 SM2、SM3、SM4)在政务、金融等高安全场景中广泛应用,但其实际部署常遭遇显著性能衰减。这一现象并非源于算法设计…...

从‘玩具’到‘利器’:我是如何用Objection 1.11.0 + Frida 16.2.1 深度分析一个真实APK的

从‘玩具’到‘利器’:Objection与Frida在真实APK分析中的实战进阶 夜神模拟器的屏幕亮起,Android 9系统的启动动画刚刚结束。我盯着终端里闪烁的光标,意识到这次要分析的目标APK远比想象中复杂——它有多层混淆、自定义加密和反调试检测。但…...

档位 3(50-75% AI 率)双工具叠加教程:嘎嘎降AI + 率零 / 比话。

档位 3(50-75% AI 率)双工具叠加教程:嘎嘎降AI 率零 / 比话。 档位 3(50-75%)是高档位场景——必须双工具叠加。这一篇给完整教程。 4 步教程速览 步骤工具操作AI 率第 1 步嘎嘎降AI整篇粗处理60% → 14%第 2 步比话…...

用Arduino Uno做个简易测距仪:手把手教你读取拉线编码器数据(附完整代码)

用Arduino Uno打造高精度拉线测距仪:从硬件选型到数据可视化的完整指南 拉线编码器作为一种经济实用的位移测量方案,在工业自动化、机器人导航和DIY项目中有着广泛应用。相比昂贵的激光测距仪,基于Arduino和拉线编码器的解决方案成本不到其十…...

AI 率 50% 以上千万别一次性整篇上传——高档位分段处理攻略。

AI 率 50% 以上千万别一次性整篇上传——高档位分段处理攻略。 「我把 30000 字硕士论文一次性丢给降 AI 工具,跑完仍然标红一大堆——是工具不行吗?」 不是工具不行。整篇粗暴跑会触发"批量改写一致风格"识别——维普 2026 知网 3.0 算法的…...

3步快速解密网易云音乐NCM文件:ncmdumpGUI完整使用指南

3步快速解密网易云音乐NCM文件:ncmdumpGUI完整使用指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI ncmdumpGUI是一款专为网易云音乐用户设计的…...

TC397+EB-tresos实战:从零配置CANFD,手把手教你避开波特率与中断的坑

TC397EB-tresos实战:从零配置CANFD,手把手教你避开波特率与中断的坑 当工程师第一次拿到TC397开发板和EB-tresos工具链时,面对CANFD配置的复杂参数体系,往往会陷入各种技术陷阱。本文将聚焦三个最易出错的配置环节:波特…...

w3c标准的庖丁解牛

它的本质是:由万维网联盟 (World Wide Web Consortium) 制定和维护的一系列 技术规范 (Technical Specifications),旨在确保 Web 内容(HTML, CSS, SVG, DOM 等)能够在不同的用户代理(浏览器、屏幕阅读器、爬虫&#xf…...

摄影作品专业水印自动化:semi-utils完整实战指南

摄影作品专业水印自动化:semi-utils完整实战指南 【免费下载链接】semi-utils 一个批量添加相机机型和拍摄参数的工具,后续「可能」添加其他功能。 项目地址: https://gitcode.com/gh_mirrors/se/semi-utils 摄影爱好者常面临一个两难选择&#x…...

Scan2CAD:如何用AI打破三维扫描到CAD模型的转化壁垒

Scan2CAD:如何用AI打破三维扫描到CAD模型的转化壁垒 【免费下载链接】Scan2CAD [CVPR19] Dataset and code used in the research project Scan2CAD: Learning CAD Model Alignment in RGB-D Scans 项目地址: https://gitcode.com/gh_mirrors/sc/Scan2CAD Sc…...

MaxKB企业级智能体平台实战:从零构建高效AI知识库与工作流

MaxKB企业级智能体平台实战:从零构建高效AI知识库与工作流 【免费下载链接】MaxKB 🔥 MaxKB is an open-source platform for building enterprise-grade agents. 强大易用的开源企业级智能体平台。 项目地址: https://gitcode.com/GitHub_Trending/ma…...