欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring AOP 注解开发

程序员文章站 2022-07-12 23:08:22
...

首先,我们要知道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 {
}
相关标签: Spring基础