详解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

告别复杂配置!Z-Image-Turbo镜像一键启动AI绘画

告别复杂配置!Z-Image-Turbo镜像一键启动AI绘画 你是不是也经历过—— 想试试最新的AI绘画工具,结果卡在第一步:下载模型要等两小时、装依赖报错十七次、配CUDA版本像解谜、最后连WebUI的端口都映射不成功? 别折腾了。今天介绍一个真正“开箱即用”的解决方案:Z-Image-Turbo镜像——阿里通义实验室开源的极速文生图模型,不用编译、不需联网、不改代码,三步启动,直接出图。 这不是概念演示,也不是简化版Demo,而是一个完整封装、生产级稳定的本地AI绘画服务。它把原本需要半天才能跑通的流程,压缩成不到两分钟的操作。下面我就带你从零开始,亲手点亮这个“即插即画”的AI画板。 1. 为什么Z-Image-Turbo值得你立刻试试? 1.1 它不是又一个“参数很大、速度很慢”的模型 Z-Image-Turbo是Z-Image的蒸馏版本,核心突破在于:用更少的计算,换更高的质量。 官方实测数据很直观: * 仅需8步采样(NFEs) 就能生成一张1024×1024高清图——主流SDXL模型通常需要30步以上; * 在H800上单图推理耗时低于0.8秒,

By Ne0inhk
海康机器人3D激光轮廓仪快速调试一

海康机器人3D激光轮廓仪快速调试一

3D轮廓仪相机物料准备 DP系列轮廓仪 24V开关电源 8pin转RJ45千兆网线 12pin转open电源线 直线运动平台 海康3D授权加密狗 软件下载 机器视觉立体相机客户端 —— 3DMVS客户端 3DMVS客户端是专为海康机器人立体相机开发的软件应用程序。适用于MV-DP系列3D激光轮廓传感器、MV-DL系列线 激光立体相机。客户端支持实时预览、参数配置、标定、数据保存、升级固件等功能。 用于3D轮廓仪图像效果调试;并集成相机SDK二次开发包供客户开发; 软件获取方式:海康机器人官网->服务支持->下 载中心,找到3DMVS最新版本下载即可 海康机器人-机器视觉-下载中心 (hikrobotics.com) 安装完成3DMVS后,SDK二次开发包路径: 默认装C盘,安装过程一直单击下一步即可 打开3DMVS后显示效果;“设备列表”里会显示当前网络里的3D相机 电脑环境配置 • 环境配置 • 关闭防火墙和杀毒软件(若安装有360、火绒、腾讯管家等杀毒软件,请关闭退出杀毒软件) • 电源选型设置为高性能模式:通过“控制面板>

By Ne0inhk
小鹏VLA 2.0的“神秘涌现”:从痛苦到突破,自动驾驶与机器人如何突然“开窍”?

小鹏VLA 2.0的“神秘涌现”:从痛苦到突破,自动驾驶与机器人如何突然“开窍”?

大家好,我是数据与算法架构提升之路,专注于AI、自动驾驶和机器人领域的最新动态。今天,我们来聊聊小鹏汽车在2025科技日上爆出的重磅消息:VLA 2.0和人形机器人IRON的“涌现”过程。这不仅仅是技术迭代,更是像科幻小说一样的突然“觉醒”。如果你对自动驾驶的未来感兴趣,这篇文章绝对值得一读!我们将基于小鹏自动驾驶负责人刘先明和机器人副总裁米良川的独家对话,揭秘背后的故事。 * 刘先明 | 小鹏汽车自动驾驶负责人 他于2016年博士毕业于伊利诺伊大学厄巴纳-香槟分校(UIUC),曾在Facebook(现Meta)、Cruise任职,从事机器学习与计算机视觉领域的前沿研究工作。现全面负责小鹏汽车自动驾驶中心业务和组织管理工作。 * 米良川 | 小鹏汽车机器人副总裁及AI技术委员会负责人 他是机器人与AI领域的资深专家。曾在NVIDIA任职十余年,有深厚的GPU并行计算、移动计算、深度学习及自动驾驶技术功底;并曾于CMU机器人研究所深造,且拥有创办机器人公司的实践经验。 涌现的奇迹:从失败边缘到全新大陆 想象一下:一个项目经历了数月的失败,团队内部甚至多次讨论是否要停掉它

By Ne0inhk

VL-JEPA: Joint Embedding Predictive Architecture for Vision-language

架构图1. 不再是学习Y跟Yhat,而是\(S_Y和\hat{S_Y}\).思路跟stable diffusion一样.不在真实Y空间学习,而是在Y编码之后的隐空间学习.所以维度更低.效果更好. 2 方法论 我们提出了VL-JEPA(图1),这是一种用于视觉语言任务的具有联合嵌入预测架构(JEPA)的模型。 VL-JEPA 使用三元组\((X_V,X_Q,Y)\) 进行训练,其中\(X_V\) 表示视觉输入(单个图像或视频帧序列),\(X_Q\) 是文本查询(即问题), Y 是文本目标 (即答案)要预测。 VL-JEPA 由四个组件组成: 1. X-Encoder ( X V ↦ S V

By Ne0inhk