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 + "");
    }

}

 

posted @ 2018-10-28 01:56  喵喵扑  阅读(196)  评论(0编辑  收藏  举报