zoukankan      html  css  js  c++  java
  • spring boot aop

    环境 lombok + spring boot + spring aop:

    import lombok.extern.slf4j.Slf4j;
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.*;
    import org.springframework.stereotype.Component;
    
    import java.util.Arrays;
    import java.util.List;
    
    /**
     * aop 测试
     *
     * @author lixingwu
     */
    @Aspect
    @Component
    @Slf4j
    public class TestAspect {
    
        /**
         * 定义要切入的点
         * 使用 execution 进行匹配
         * 这里匹配的是 BackInfoVoController 下面的的所有 public 方法
         * 这样调用了里面的方法,就会执行切点的定义的方法
         * 该方法没有方法体,只用于定义切点,即使写了方法体也不会被执行到
         *
         * @author "lixingwu"
         */
        @Pointcut("execution(public * com.zhwlt.logistics.controller.base.CommentCtl.logout(..))")
        public void test() {
        }
    
        /**
         * 方法描述:环绕通知.
         * 创建时间:2018-09-25 15:31:47
         *
         * @param pjp 被切对象
         * @author "lixingwu"
         */
        @Around(value = "test()", argNames = "pjp")
        public Object aroundTest(ProceedingJoinPoint pjp) throws Throwable {
            log.debug("==========环绕通知 开始==========");
            Object obj = pjp.proceed();
            log.debug("==========环绕通知 结果==========");
            log.debug("==========" + obj + "==========");
            log.debug("==========环绕通知 结束==========");
            return obj;
        }
    
        /**
         * 方法描述:进入切点时,先执行该方法.
         * 创建时间:2018-09-25 15:21:22
         *
         * @param joinPoint 被切对象
         * @author "lixingwu"
         */
        @Before("test()")
        public void beforeTest(JoinPoint joinPoint) {
            printJoinPoint(joinPoint);
            log.debug("==========调用方法之前===========");
        }
    
        /**
         * 方法描述:在切点执行完成后执行该方法.
         * 创建时间:2018-09-25 15:26:48
         *
         * @param joinPoint 被切对象
         * @author "lixingwu"
         */
        @After("test()")
        public void afterTest(JoinPoint joinPoint) {
            printJoinPoint(joinPoint);
            log.debug("==========调用方法之后==========");
        }
    
        /**
         * 方法描述:切点异常通知.
         * 创建时间:2018-09-25 15:35:06
         *
         * @param joinPoint 被切对象
         * @param ex        异常信息
         * @author "lixingwu"
         */
        @AfterThrowing(pointcut = "test()", throwing = "ex")
        public void afterThrowing(JoinPoint joinPoint, Exception ex) {
            printJoinPoint(joinPoint);
            log.debug(ex.getMessage());
            log.debug("==========切点发生异常==========");
        }
    
        /**
         * 打印 JoinPoint 对象的信息
         *
         * @param joinPoint 切点对象
         */
        public void printJoinPoint(JoinPoint joinPoint) {
            String methodName = joinPoint.getSignature().getName();
            List<Object> args = Arrays.asList(joinPoint.getArgs());
            log.debug("方法名[" + methodName + "],参数" + args + "");
        }
    
    }
  • 相关阅读:
    boost编译中的细节问题
    geos编译问题
    安装pytorch的细节记录
    Qt学习-模仿Qt实现一个colorbutton
    BOOST内存管理-intrusive_ptr
    GEOS使用记录
    matlab添加永久路径
    关于浮点数的取值范围以及精度的问题
    vs2010中使用命令行参数
    sprintf fprintf EOF scanf 的返回值 深拷贝与浅拷贝
  • 原文地址:https://www.cnblogs.com/lixingwu/p/9815843.html
Copyright © 2011-2022 走看看