首先我们要引入对应的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