详解Spring AOP篇一

详解Spring AOP篇一

目录

AOP

Spring AOP引入

使用Spring AOP

引入AOP依赖

编写AOP程序

Aspect

TestController

 运行结果

对上面的注解和方法的介绍

AOP面向切面编程的优势


AOP

AOP是Spring框架的第⼆⼤核⼼(第⼀⼤核⼼是IoC)。

那么什么是AOP呢?

AOP是Aspect Oriented Programming(⾯向切⾯编程)的缩写。

那么什么是⾯向切⾯编程呢?

切⾯就是指某⼀类特定问题, 所以AOP也可以理解为⾯向特定⽅法编程.

那么什么是Spring AOP呢?

AOP是⼀种思想, 它的实现⽅法有很多, 有Spring AOP,也有AspectJ、CGLIB等.
Spring AOP是其中的⼀种实现⽅式.

Spring AOP引入

我们现在有⼀个项⽬, 项⽬中开发了很多的业务功能:、

现在有⼀些业务的执⾏效率⽐较低, 耗时较⻓, 我们需要对接⼝进⾏优化.
第⼀步就需要定位出执⾏耗时⽐较⻓的业务⽅法, 再针对该业务⽅法来进⾏优化
如何定位呢? 我们就需要统计当前项⽬中每⼀个业务⽅法的执⾏耗时.
如何统计呢? 可以在业务⽅法运⾏前和运⾏后, 记录下⽅法的开始时间和结束时间, 两者之差就是这个⽅法的耗时。

这种⽅法是可以解决问题的, 但⼀个项⽬中会包含很多业务模块, 每个业务模块⼜有很多接⼝, ⼀个接⼝⼜包含很多⽅法, 如果我们要在每个业务⽅法中都记录⽅法的耗时, 对于程序员⽽⾔, 会增加很多的⼯作量.
AOP就可以做到在不改动这些原始⽅法的基础上, 针对特定的⽅法进⾏功能的增强.
AOP的作⽤:在程序运⾏期间在不修改源代码的基础上对已有⽅法进⾏增强(⽆侵⼊性: 解耦)。

使用Spring AOP

引入AOP依赖

在pom.xml文件中添加配置

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
编写AOP程序
Aspect
import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; @Slf4j @Component @Aspect public class AspectTest { /** * 记录⽅法耗时 */ @Around("execution(* com.wmh.springaop.controller.*.*(..))") public Object recordTime(ProceedingJoinPoint pjp) throws Throwable { //记录⽅法执⾏开始时间 long begin = System.currentTimeMillis(); //执⾏原始⽅法 Object result = pjp.proceed(); //记录⽅法执⾏结束时间 long end = System.currentTimeMillis(); //记录⽅法执⾏耗时 log.info(pjp.getSignature() + "执⾏耗时: {}ms", end - begin); return result; } }
TestController
package com.wmh.springaop.controller; import com.wmh.springaop.config.MyAspect; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @Slf4j @RequestMapping("/test") @RestController public class TestController { @RequestMapping("/t1") public String t1(){ log.info("执行t1方法..."); return "t1"; } }
 运行结果
对上面的注解和方法的介绍
1. @Aspect: 标识这是⼀个切⾯类
2. @Around: 环绕通知, 在⽬标⽅法的前后都会被执⾏. 后⾯的表达式表⽰对哪些⽅法进⾏增强.
3. ProceedingJoinPoint.proceed() 让原始⽅法执⾏

整个代码划分为三部分:

方法执行前逻辑;

原始方法执行;

方法执行后逻辑。

我们通过AOP⼊⻔程序完成了业务接⼝执⾏耗时的统计.

AOP面向切面编程的优势

1. 关注点分离
提高代码清晰度:AOP通过引入“切面”的概念,将横切关注点(如日志记录、安全检查、事务管理等)从业务逻辑中分离出来,使得业务逻辑更加清晰、专注于核心功能。
降低耦合度:横切关注点与业务逻辑的分离,降低了不同模块之间的耦合度,提高了系统的模块化和可维护性。
2. 代码重用
提高开发效率:通过封装横切关注点为可重用的切面,避免了在多个模块中重复编写相同的辅助功能代码,提高了开发效率。
减少冗余代码:切面可以在多个位置被重用,减少了代码冗余,使代码更加简洁。
3. 系统可维护性增强
集中管理:将横切关注点封装在切面中,使得对这些功能的修改和增强可以在单一位置进行,简化了维护工作。
降低维护成本:由于关注点分离和代码重用,减少了因修改而引入新错误的风险,降低了系统的维护成本。
4. 灵活性提高
动态代理:AOP通常通过动态代理技术实现,在运行时动态地将切面应用到目标对象上,这使得系统具有更高的灵活性。开发者可以根据实际需求,动态地添加或移除切面。
易于扩展:当需要添加新的横切关注点时,只需定义新的切面并将其应用到相应的位置即可,无需修改现有的业务逻辑代码。
5. 易于测试
单元测试:由于业务逻辑中不再包含非核心代码(如日志记录、安全检查等),单元测试可以更加聚焦于业务功能本身,提高了测试的准确性和效率。
模拟特定情况:一些切面可能直接被禁用或用测试特定的实现替代,以便在测试环境中模拟特定情况。
6. 支持事务管理
简化事务处理:AOP提供了一种简化的事务管理机制,通过定义事务管理切面,可以轻松地声明哪些方法需要事务支持,同时避免了在业务代码中混入事务管理逻辑。

Read more

【AIGC】ChatGPT 的 Prompt Hacker 技巧:让简历轻松通过 AI 筛选

【AIGC】ChatGPT 的 Prompt Hacker 技巧:让简历轻松通过 AI 筛选

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳]本文专栏: AIGC |ChatGPT 文章目录 * 💯前言 * 💯背景 * 简化简历格式 * 💯简化 Prompt Hacker 的逻辑 * 使用 Prompt Hacker 技巧 * **示例 Prompt:引导 AI 筛选简历** * 如何利用 Prompt 优化简历筛选? * **示例 Prompt** * 💯在简历中注入指令词 * **为什么在简历中注入指令词?** * **具体操作方法** * **示例 Prompt**: * **操作步骤** * 提示与风险 * 💯极端场景验证:测试简历优化策略的有效性 * 验证方法 * 测试场景示例 * 测试结论 * 总结 * 💯实际应用:优化简历的操作步骤 * 操作步骤 * 💯注意事项:关于简历优化的核心思考 * 💯小结 💯前言 随着人工智能技术的迅猛发展,尤其是大语言模型如

By Ne0inhk
2026年各大高校AIGC检测政策汇总(持续更新)

2026年各大高校AIGC检测政策汇总(持续更新)

2026年各大高校AIGC检测政策汇总(持续更新) 2026年毕业季正式来临,AIGC检测已经不再是"可能会查",而是"一定会查"。从去年下半年到现在,全国高校密集出台了一系列针对论文AI生成内容的检测政策。本文将为大家做一个尽可能全面的汇总,方便同学们快速了解自己学校的要求,提前做好准备。 本文持续更新,建议收藏。 2026年高校AIGC检测的整体趋势 在详细列出各高校政策之前,先给大家概括一下今年的整体形势: 三大核心变化 1. 检测范围全覆盖:不再只是抽检,而是全部论文必查AIGC 2. 检测标准趋严:AI率阈值从去年普遍的30%收紧到20%甚至10% 3. 处罚力度加大:从"修改后重新提交"升级到"延期答辩"甚至"取消答辩资格" 主要检测平台分布 * 知网AIGC检测系统:覆盖约60%的985/211高校

By Ne0inhk

无需任何拓展Copilot接入第三方OpenAI接口教程

禁止搬运,转载需标明本文链接 省流:修改"C:\Users\你的用户名称\.vscode\extensions\github.copilot-chat-0.35.0\package.json"中的"when": "productQualityType != 'stable'"为"when": "productQualityType == 'stable'",即可在copilot添加支持openAI的第三方接口 我在寻找怎么让copilot接入第三方接口的时候,通过别人的贴子(长期有效)接入第三方 OpenAI 兼容模型到 GitHub Copilot-ZEEKLOG博客发现了官方的讨论Add custom OpenAI endpoint configuration

By Ne0inhk

5大理由告诉你:为什么Godot Copilot是游戏开发的终极AI助手

还在为Godot游戏开发中的重复编码而烦恼吗?Godot Copilot这款AI智能代码生成插件将彻底改变你的开发体验,让开发效率提升3倍以上! 【免费下载链接】godot-copilotAI-assisted development for the Godot engine. 项目地址: https://gitcode.com/gh_mirrors/go/godot-copilot 一键安装Godot AI插件 Godot Copilot的安装过程简单到令人惊喜。你只需要在Godot引擎的资产库中搜索"Copilot",下载并启用插件即可。或者直接从项目仓库克隆到本地,将copilot插件文件夹复制到项目的res://addons目录中。 安装完成后,在项目设置中启用插件,然后在右侧的Copilot面板中输入你的OpenAI API密钥。整个过程只需要几分钟,就能开始享受AI辅助开发的便利。 智能代码补全实战教程 使用Godot Copilot进行代码生成非常便捷!在代码编辑器中,只需按下预设的快捷键,AI就会在当前光标位置直接插入智能生成的代码。 无论是创建实

By Ne0inhk