前言
aop作用:参数打印、结果打印、日志保存、权限处理、缓存处理、事务处理等等。
1、pom.xml依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2、controller切面控制类
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
/**
* @author liujianming
* @version 1.0
* @describe
* @date 2022/11/9 8:47
*/
@Aspect
@Component
public class AspectController {
/**
* 在某个方法之前和之后做一些事情
* 也可以指定某个特定方法或者某个文件
* @Around("execution(* com.ljm.thewaytogod.aspect.demo.controller.*.method1(..))")
* @Around("execution(* com.ljm.thewaytogod.aspect.demo.controller.TestController.*(..))")
* @param joinPoint
*
* @param joinPoint
* @return
*/
@Around("execution(* com.ljm.thewaytogod.aspect.demo.controller.*.*(..))")
public Object around(ProceedingJoinPoint joinPoint) {
// 之前
System.out.println("方法前" + System.currentTimeMillis());
Object o = null;
try {
// 原方法
o = joinPoint.proceed();
} catch (Throwable e) {
e.printStackTrace();
}
// 之后
System.out.println("方法后" + System.currentTimeMillis());
return o;
}
}
3、controller层
package com.ljm.thewaytogod.aspect.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.TimeUnit;
/**
* @author liujianming
* @version 1.0
* @describe
* @date 2022/11/9 9:00
*/
@RestController
@RequestMapping("/aspect")
public class AspectTestController {
@GetMapping("/oo")
public String aspectTest1() {
System.out.println("oo...");
return "ok";
}
@GetMapping("/ooo")
public String aspectTest2() throws InterruptedException {
System.out.println("ooo...");
TimeUnit.SECONDS.sleep(1);
return "ok";
}
}
4、执行aspectTest2()方法控制台输出