美文网首页
Spring--AOP

Spring--AOP

作者: 何以解君愁 | 来源:发表于2022-08-14 15:28 被阅读0次
切面类和目标类都需要交给IOC容器
@Aspect:将当前主键标识为切面
<aop:aspectj-autoproxy/>:开启基于注解的AOP

@Before("execution(* 包名.类名.*(..))"):将方法标识为前置方法,在目标代码执行之前执行,例@Before("execution(* com.Test.calculatorImpl.*(..))")
(第一个*表任意修饰符和返回值类型,第二个*表类中所有的方法,..表示任意的方法中的任意的参数列表,类名也可写*,表当前包下的所有类,联想一下正则)

在@Before下的通知方法下设置参数JoinPoint joinPoint可获取连接点的信息:
        //获取连接点的方法的签名信息(声明信息)
        Signature signature = joinPoint.getSignature();
        //获取连接点所对应方法的参数
        Object[] args = joinPoint.getArgs();

//切入点表达式重用
//@Pointcut设置之后@Before("execution(* 包名.类名.*(..))")可直接使用@Before("pointcut()")
@Pointcut("execution(* com.Test.calculatorImpl.*(..))")
 public void pointcut(){}

@After("pointcut()")将方法标识为后置方法,在目标代码的Finally语句中执行

@AfterReturning:返回通知,在目标对象方法返回值之后执行
returning = "result":设置返回值
    @AfterReturning(value = "pointcut()", returning = "result")
    public void afterReturningAdviceAethod(JoinPoint joinPoint, Object result) {
        //获取连接点所对应方法的签名信息
        Signature signature = joinPoint.getSignature();
        System.out.println(result);
    }

@AfterThrowing:异常通知
@AfterThrowing(value = "pointcut()", throwing = "ex")
    public void afterReturningAdviceAethod(JoinPoint joinPoint, Exception ex) {
        //获取连接点所对应方法的签名信息
        Signature signature = joinPoint.getSignature();
        System.out.println(signature.getName()+ex);
    }

@Around:环绕通知(环绕通知方法的返回值一定要和目标对象的方法的返回值一致)
@Around("pointcut()")
    public Object aroundAdviceMethod(ProceedingJoinPoint proceedingJoinPoint){
        Object proceed = null;
        try {
            System.out.println("前置");
            //表示目标对象方法的执行
            proceed = proceedingJoinPoint.proceed();
            System.out.println("返回");
        } catch (Throwable e) {
            e.printStackTrace();
            System.out.println("异常");
        }finally {
            System.out.println("后置");
        }
        return proceed;
    }

@Order:设置它的value设置切面的优先级,设置的数越小,优先级越高,如@Order(1),写于@Aspect下

相关文章

  • Spring--AOP

  • Spring--AOP使用

    Spring的AOP也是基于AspectJ,和安卓中(之前文章:Android--AOP架构设计之使用Aspect...

  • Spring--AOP概念

    AOP (Aspect Oriented Programming)是一种设计思想,是软件设计领域中的面向切面编程,...

网友评论

      本文标题:Spring--AOP

      本文链接:https://www.haomeiwen.com/subject/trxfgrtx.html