zoukankan      html  css  js  c++  java
  • spring AOP之重用切点表达式

    在使用@Before(execution(value=""))使用切点时,如果是需要重复使用,可以进行统一的设置。

    比如说现在有这么一个前置通知和后置通知:

    package com.gong.spring.aop.impl;
    
    import java.util.Arrays;
    import java.util.List;
    
    import javax.management.RuntimeErrorException;
    
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.After;
    import org.aspectj.lang.annotation.AfterReturning;
    import org.aspectj.lang.annotation.AfterThrowing;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Before;
    import org.springframework.stereotype.Component;
    
    //把这个类声明为一个切面:需要把该类放入到IOC容器中,再声明为一个切面
    @Aspect
    @Component
    public class LoggingAspect {
        //声明该方法为一个前置通知,在目标方法之前执行
        @Before("execution(public int com.gong.spring.aop.impl.Calculator.*(int, int))")
        public void beforeMethod(JoinPoint joinPoint) {
            String methodName = joinPoint.getSignature().getName();
            List<Object> args = Arrays.asList(joinPoint.getArgs());
            System.out.println(methodName+" begin with "+args);
        }
        //后置通知:在目标方法执行后,无论是否发生异常,执行的通知
        //在后置通知中不能访问目标的执行结果
        @After("execution(public int com.gong.spring.aop.impl.Calculator.*(int, int))")
        public void afterMethod(JoinPoint joinPoint) {
            //获取名字
            String methodName = joinPoint.getSignature().getName();
            //获取参数
            List<Object> args = Arrays.asList(joinPoint.getArgs());
            System.out.println(methodName+" end with "+args);
        }
    }

    在@before里面的切点是一样的,我们可以将重复的用切点表达式表示。

    在LoggingAspect 类中新建:

        @Pointcut("execution(public int com.gong.spring.aop.impl.Calculator.*(int, int))")
        public void declarJoinPointExpression() {}

    然后在使用Before等注解时,就可以简化了:

    @Before("declarJoinPointExpression()")
    @After("declarJoinPointExpression()")
  • 相关阅读:
    flask 需要下载的包
    flask知识点
    移动端网页实现(用百分比进行定位)
    js中的preventDefault
    网页重构面试笔试题
    J2EE课程设计的购物车代码(水平有限,仅供参考)
    JavaScript实现对象克隆函数clone( )的程序及分析
    WEB技术书籍推荐
    2016 Tianjin University Software Testing (lab2)
    Mac下安装npm 、node、ionic和cordova
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12166364.html
Copyright © 2011-2022 走看看