Spring AOP 注解开发

首先,我们要知道AOP中我们要配置哪几部分

  1. 切面(Aspect)任何存在通知和切入点映射关系的类都需要被修饰为@Aspect,同时因为我们希望交给Spring来管理,所以用@Component来修饰作为一个Bean
  2. 在切面中,将通知(共性方法advice)抽取为一个方法
  3. 切入点(Pointcut)使用一个public void funcName()方法,在该方法上标记@pointcut()里面的参数设置为正则表达式,符合该表达式的方法会被监听拦截到。
  4. 通知和切入点的映射关系,在通知上面配好切入点的执行时机@before @after @around @afterReturning @afterThrowing

接下来我们就来实操一下:
第一步,配置切面:

@Component
@Aspect
public class AOPAdvice {

}

第二步,配置切入点:

@Component
@Aspect
public class AOPAdvice {
    @Pointcut("execution(* *..*(..))")
    public void pt(){}
}

第三步,抽取通知方法:

@Component
@Aspect
public class AOPAdvice {
    @Pointcut("execution(* *..*(..))")
    public void pt(){}
    
    public void before(){
        System.out.println("前置before...");
    }
}

第四步:配置方法和切入点的关系,以Before为例:

@Component
@Aspect
public class AOPAdvice {
    @Pointcut("execution(* *..*(..))")
    public void pt(){}

    @Before("pt1()")
    public void before(){
        System.out.println("前置before...");
    }
}

进阶:
我们可以把切入点单独做一个类

public class AOPPointcut {
    @Pointcut("execution(* *..*(..))")
    public void pt2(){}
}

同时使用@around来进行织入

@Component
@Aspect
public class AOPAdvice {
    @Pointcut("execution(* *..*(..))")
    public void pt(){}

    @Before("pt1()")
    public void before(){
        System.out.println("前置before...");
    }
    @Around("AOPPointcut.pt2()")
    public Object around(ProceedingJoinPoint pjp) throws Throwable {
        System.out.println("环绕前around before...");//织入部分1
        Object ret = pjp.proceed();//这里就代表原先执行的方法,我们可以获得该部分方法的返回值
        System.out.println("环绕后around after...");//织入部分2
        return ret;//如果要求方法结束后有返回值,我们可以在这里返回
    }
}

最后如果你仍然保留了XML文件的话,那你需要去XML文件里面开启AOP注解的支持。如果是纯注解开发的话,那就去你的主配置类开启支持:

@Configuration
@ComponentScan("com.sun")
@EnableAspectJAutoProxy
public class SpringConfig {
}
上一篇:@Aspect运用


下一篇:Vue项目中eslint报错提示记录