关于 @Aspect 注解的使用
创始人
2024-06-01 02:36:02
0

一、Spring AOP

AOP(Aspect Oriented Programming) 是一种面向切面的编程思想。面向切面编程是将程序抽象成各个切面,即解剖对象的内部,将那些影响了多个类的公共行为抽取到一个可重用模块里,减少系统的重复代码,降低模块间的耦合度,增强代码的可操作性和可维护性。

其中的核心概念:

名称

说明

Joinpoint(连接点)

指那些被拦截的点,在spring中,指可以被动态代理拦截目标类的方法

Pointcut(切入点)

指要对哪些 Jointpoint 进行拦截,即被拦截的连接点

Advice(通知)

指拦截到 Joinpoint 之后要做的事情,即对切入点增强的内容

Target(目标)

指代理的目标对象

Weaving(植入)

指把增强代码应用到目标上,生成代理对象的过程

Proxy(代理)

指生成的代理对象

Aspect(切面)

切入点和通知的结合

二、AOP的使用场景

AOP可以拦截指定的方法,并且对方法增强,比如:事务、日志、权限、性能监测等增强,而且无需侵入到业务代码中,使业务与非业务处理逻辑分离。

三、AOP的通知分类以及代码示例

1、通知的分类

2、代码示例

(1)pom.xml中导入依赖

        org.aspectjaspectjweaver1.9.7

(2)新建配置类LogAspectConfig,使用 @Component、@Aspect 定义切面,@Pointcut定义切点

@Component
@Aspect
public class LogAspectConfig {// 匹配指定包中的所有方法//execution(* org.example.service.*(..))// 匹配当前包中的所有public方法//execution(public * UserService.*(..))// 匹配指定包中的所有public方法,并且返回值是int类型的方法//execution(public int org.example.service.*(..))// 切点@Pointcut("execution(* org.example.controller.*.*(..))")public void operationLog(){};/*** 方法执行前调用* @param joinPoint*/@Before("operationLog()")public void TestBefore(JoinPoint joinPoint){String methodName = joinPoint.getSignature().getName();System.out.println("即将调用该方法:" + methodName);}/*** 方法调用后执行* @param joinPoint*/@After("operationLog()")public void afterHandler(JoinPoint joinPoint) {Object[] args = joinPoint.getArgs();String name = joinPoint.getSignature().getName();System.out.println("入参:" + Arrays.asList(args).toString() + ",调用方法名称:" + name);System.out.println("调用方法之后");}/*** 调用方法并正常返回后执行*/@AfterReturning("operationLog()")public void afterReturningHandler() {System.out.println("调用方法并正常返回后执行");}/*** 调用方法却抛出异常后执行*/@AfterThrowing("operationLog()")public void afterThrowingHandler() {System.out.println("调用方法却抛出异常后执行");}/*** 环绕增强,能控制切点执行前,执行后* @param joinPoint* @return*/@Around("operationLog()")public Object doAround(ProceedingJoinPoint joinPoint) {Object proceed = null;try {System.out.println("方法执行前");proceed = joinPoint.proceed();System.out.println("方法执行后");} catch (Throwable throwable) {throwable.printStackTrace();}return proceed;}
}

(3)创建CommonController

@RestController
@RequestMapping("/text")
public class CommonController {@GetMapping("/query/{id}")public String query(@PathVariable int id) {if ( 1 == id ) {return "李四";}return "张三";}
}

(4)postman请求该URL

GET请求: http://192.168.11.7:27100/text/query/1
返回结果:
方法执行前
即将调用该方法:query
方法执行后
入参:[1],调用方法名称:query
调用方法之后
调用方法并正常返回后执行

相关内容

热门资讯

国产安卓系统哪个流畅,揭秘哪家... 你有没有想过,手机里的操作系统就像是我们的大脑,有时候它运行得快慢,直接影响我们的使用体验呢?今天,...
安卓怎么刷主机系统,掌握主机系... 你有没有想过,你的安卓手机或者平板,是不是也能像电脑一样,装上各种酷炫的系统呢?没错,今天就要来给你...
安卓系统桌面显示时间,见证日常... 你有没有发现,每次打开安卓手机,那桌面上的时间总是一闪一闪的,仿佛在告诉你:“时间不等人哦!”今天,...
os云刷安卓系统,畅享智能新体... 你有没有想过,你的安卓手机是不是也能像电脑一样,装上各种酷炫的系统呢?没错,今天就要来跟你聊聊这个神...
安卓系统如何装siri,安卓设... 你有没有想过,在安卓手机上也能享受到Siri的智能语音助手服务呢?没错,就是那个在iPhone上呼之...
电脑怎么安卓双系统,电脑安装安... 你有没有想过,一台电脑同时运行安卓和Windows系统,那得多酷啊!想象一边处理工作,一边刷刷抖音,...
linux操作系统与安卓系统,... 你有没有想过,为什么你的手机可以随时随地给你发送信息,而你的电脑却能帮你处理复杂的任务呢?这背后,就...
安卓大屏系统信息,功能与体验全... 你有没有发现,最近手机界的大屏风潮真是势不可挡啊!安卓大屏系统信息,这可是个热门话题呢!想象拿着一块...
苹果7转安卓系统,探索安卓系统... 你有没有想过,从苹果7转到安卓系统会是怎样的体验呢?想象你手中的那个曾经陪伴你度过无数美好时光的苹果...
安卓系统打卡手机推荐,高效便捷... 你有没有想过,每天早上起床后,第一件事就是拿出手机打卡签到?这已经成为现代生活中不可或缺的一部分了。...
安卓手机装了小米系统,小米系统... 你有没有想过,把安卓手机的灵魂换成小米的系统,会是怎样的体验呢?想象原本流畅的安卓系统,突然间被注入...
安卓汽车系统怎么升级,轻松实现... 亲爱的安卓车主们,你是否也像我一样,对汽车系统升级充满了好奇和期待呢?想象你的爱车就像一部智能手机,...
手机怎么变安卓系统,轻松实现系... 你有没有想过,你的手机居然可以变身成为安卓系统呢?没错,就是那个自由度极高的操作系统!今天,就让我来...
安卓仿ios系统横条,打造流畅... 你有没有发现,最近安卓手机上出现了一种特别的新花样——仿iOS系统的横条设计!这可不是简单的模仿,而...
谷歌汽车安卓系统下载,引领智能... 你有没有想过,未来的汽车可能会变成一个移动的智能中心?想象你的汽车不仅能够带你穿梭在城市的大街小巷,...
安卓系统硬件修复软件,全面解析... 手机里的安卓系统突然卡顿,是不是让你头疼不已?别急,今天就来给你揭秘那些神奇的安卓系统硬件修复软件,...
鸿蒙系统比安卓系统大么,体积对... 你有没有想过,手机里的操作系统,就像是手机的心脏,它的大小、性能,都直接影响到手机的使用体验。今天,...
安卓系统 刷机模式,刷机模式操... 你有没有想过,你的安卓手机其实就像一个隐藏着无限可能的宝藏呢?没错,今天就要来跟你聊聊这个宝藏的秘密...
案卷制作系统下载安卓,高效便捷... 你有没有想过,在手机上也能轻松制作案卷呢?没错,现在就有这么一款神器——案卷制作系统,而且它还支持安...
安卓如何设置ios系统,如何将... 你是不是也和我一样,对安卓手机上的iOS系统充满了好奇?想要在安卓设备上体验一下苹果的生态系统?没问...