首先我们要引入对应的aspectj的对应依赖

<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.7</version>
</dependency>
这里已经默认你创建好了你的对应 切面类以及切点和对应的通知方式

下面是常用的execution表达式

1)execution(* *(..))
//表示匹配所有方法

2)execution(public * com.controller.UserController.*(..))
//表示匹配com.controller.UserController类或接口中所有的公有方法

3)execution(* com.controller..*.*(..))
//表示匹配com.savage.server包及其子包下的所有方法,4大权限修饰符
//public,protected,private,default

4)execution(* get*(..))
//表示以 get开始的方法

5)execution(* com.controller.*.*(..))
//controller包下的任何的方法

6)execution(* com.controller..*.*(..))
//controller包下以及子包下的任何的方法
此时我们可以来做一个简单的小demo进行演示

首先我们需要创造一个切面类

@Aspect
@Component
public class Advice {

@Around("execution(public * com.example.aopdemo.demos.web.BasicController.*(..)) ")
public Object around(ProceedingJoinPoint pjp) throws Throwable{

System.out.println("在执行之前做点什么");
Object proceed = pjp.proceed();
System.out.println("在执行之后做点什么");
return proceed;
}


}
这里可以简单说明下:

命名规范:一般对于切面类而言会以Aspect结尾
这个切面类需要被spring所管理
execution需要路径正确,否则启动会报错
ProceedingJoinPoint是切点对象,是aspectj封装的,执行切点方法需要我们主动调用proceed()方法
启动运行测试一下:

对应controller:

@RequestMapping("/hello")
@ResponseBody
public String hello(@RequestParam(name = "name", defaultValue = "unknown user") String name) {
System.out.println("我被执行了");
return "Hello " + name;
}
对应控制台输出

2024-10-13 18:23:44.255 INFO 4308 --- [)-192.168.31.26] CoolRequest Method Call : call:com.example.aopdemo.demos.web.BasicController.hello
2024-10-13 18:23:44.255 INFO 4308 --- [)-192.168.31.26] CoolRequest Method Call : args:{0=caiyi}
在执行之前做点什么
我被执行了
在执行之后做点什么
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_66196770/article/details/143377719