作业参考
AOP
概念
- 连接点(Joinpoint): 程序运行中的一个点(方法运行、异常抛出)
- 通知(Advice):(拦截到某连接点后要执行的动作)
- 切点(Pointcut):(选择哪些连接点)
- 切面(Aspect):(切点和通知的组合)
实操
使用熟悉的利用注解定义切点的方法实现。
- 定义注解
@Target(value= ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogAnno {
String action();
}
- 定义切面、切点
@Aspect
@Component
public class MyAspect {
// 切点; 切面;连接点;
@Pointcut("@annotation(LogAnno)")
public void pointCut() {
}
@Around("pointCut() && @annotation(anno)")
public Object process(ProceedingJoinPoint joinPoint, LogAnno anno) throws Throwable {
//
System.out.println("========================");
Object[] args = joinPoint.getArgs();
for(Object object : args) {
System.out.println(object);
}
System.out.println(anno.action());
System.out.println("========================");
return joinPoint.proceed();
}
}
- 方法上添加注解
@GetMapping("/list") //1, 1,2,3,4 加一条后 1,2,3,4,5
@LogAnno(action = "查询合同") // 1,10 2,10
public Result<IPage<Contract>> list(@RequestParam int page, @RequestParam int size) {
System.out.println("查询列表");
}