spring AOP 使用注解进行方法的运行时间的计算

我们之前做AOP是直接拦截某个包下的所有方法,但是有的时候并非所有的方法都是需要进行AOP的,那么是否可以给定某个标识来进行 AOP呢?比如进行注解, 答案是可以的, 通过一个自定义注解,在 AOP里面根据那个方法加了注解来进行处理,别的不多说。直接上代码(前提需要了解一定的AOP知识以及注解式AOP方可阅读此文)

注解类:

import java.lang.annotation.*;

/**
 *@Description: 获取程序执行时间(在需要使用的方法上面增加此注解)
 *@Author: guanzhou.su,  dont know what is  mean? contact me at QQ:838951396, wechat:13824866769 
 *@Date: 2019/9/2
 **/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface CountTime {
}

 

AOP 类:

/**
*@Description: 计算方法耗时
*@Author: guanzhou.su,  dont know what is  mean? contact me at QQ:838951396, wechat:13824866769
*@Date: 2019/9/2
**/
@Component
@Aspect
public class CountTimeAop {
    @Pointcut("execution(* com.kds2.service.*.*(..))")
    public void point() {
    }

    @Around("@annotation(countTime)")
    public Object doAround(ProceedingJoinPoint pjp, CountTime countTime){
        long startTime = System.currentTimeMillis();
        Object obj = null;
        try {
            obj = pjp.proceed();
        } catch (Throwable e) {
            e.printStackTrace();
        }
        long endTime = System.currentTimeMillis();
        MethodSignature signature = (MethodSignature) pjp.getSignature();
        String methodName = signature.getDeclaringTypeName() + "." + signature.getName();
        System.out.println("method [" + methodName + "]  spend time: "+(endTime-startTime)+"ms");
        return obj;
    }
}

可以看到上面的 aoAround 方法是通过切点(point() 切点),针对 com.kds2.service 下的所有加上 @CountTime 注解的方法进行拦截, 在方法执行前后进行处理,并且计算时间

具体方法(com.kds2/service下的某个类的方法):

/**
     *@Description: 测试
     *@Param: [vo]
     *@Author: guanzhou.su,  dont know what is  mean? contact me at QQ:838951396, wechat:13824866769
     *@Date: 2019/8/30
     *@return: com.kds2.resp.VoResp<java.lang.Void>
     *
     **/
    @CountTime
    public void test() {
        System.out.println("test method");
    }

打印结果:

test method

method [com.kds2.service.TblWeixinTemplateExtLogService.test]  spend time: 72ms

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值