快速使用注解方式实现aop切面编程

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
@Documented
public @interface AnnoAopLogs {

    boolean value() default true;  // 是否需要打印日志
}
// 切面
@Aspect
@Configuration
public class AopLogs {

    @Pointcut("@annotation(com.wsgw.htjc.frontend.utils.AnnoAopLogs)")    // 设定切点
    public void pointCut(){}

    // 环绕通知
    @Around("pointCut()")
    public Object aroundLog(ProceedingJoinPoint joinpoint) throws Throwable {

        Object[] args = joinpoint.getArgs();

        String param = "";
        for (int i = 0; i < args.length; i++) {
            if (args[i] != null) {
                try {
                    param += JSON.toJSONString(args[i]);
                } catch (Exception e) {}
            }
        }
//        long start = System.currentTimeMillis();
        Object result = null;


        String classdName = joinpoint.getTarget().getClass().getSimpleName();
        String methodName = joinpoint.getSignature().getName();

        // 获取注解
        Class<?> aClass = joinpoint.getTarget().getClass();
        Class<?>[] par=((MethodSignature) joinpoint.getSignature()).getParameterTypes();
        Method method = aClass.getMethod(methodName, par);
        AnnoAopLogs annotation = method.getAnnotation(AnnoAopLogs.class);
        boolean value = annotation.value();

        Date date = new Date();
        DateFormat format = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
//        System.out.println("请求参数 【  " + param +" 】");
        try {
            if (value) {
                System.out.println("================== "+ format.format(date) + "=======" + classdName + " => " + methodName + " 开始请求接口 ================");

                //有返回参数 则需返回值
                result =  joinpoint.proceed();

                long end = System.currentTimeMillis();
                System.out.println("================== 请求结束【总共执行时长" + (end - date.getTime()) + " 毫秒】==========");
                return result;
            }
            result =  joinpoint.proceed();
        } catch (Exception e) {}
        return result;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值