作业参考

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("查询列表");
    }