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 + "");
        }
    
    }
  • 相关阅读:
    【转】Lesktop 1.0 ——开源JS控件库,WebIM和网盘
    个人开公司的流程,以后用得着(转)
    C#中的弱引用
    同步异步的知识补充
    SynchronizationContext
    泛型弱引用(不继承 System.WeakReference)
    【转】亂數產生器:Random 與 RNGCryptoServiceProvider
    Oracle trunc()函数的用法
    [转]C# WinForm自定义控件整理
    自定义控件小结进阶篇(转)
  • 原文地址:https://www.cnblogs.com/lixingwu/p/9815843.html
Copyright © 2011-2022 走看看