作业参考

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