日更挑战-java注解实现代码调试

2021-06-07  本文已影响0人  愿你我皆是黑马

越不懂的越爱装
大家都同等:IT世界没有难不难,只有是否了解过

挑战目录

为什么可以使用注解进行代码调试


注解的实现

@Retention(RetentionPolicy.SOURCE)
@Target(ElementType.METHOD)
public @interface TestAnnotation {
   String methodName() default ""; //属性一
   String desc() default ""; //属性二
}

获取注解属性:根据@Retention的描述,知道可能有三种方式


使用静态代理(Aspectd)实现方法日志打印

  1. 定义注解

    @Retention(RetentionPolicy.SOURCE)
    @Target(ElementType.METHOD)
    public @interface TestAnnotation {
        String methodName() default "";
        String desc() default "";
    }
    
  2. 实现处理

    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.reflect.MethodSignature;
    
    import java.lang.reflect.Method;
    
    @Aspect
    public class mp {
    
        @Around("@annotation(TestAnnotation)")
        public Object beforeReturnValue(ProceedingJoinPoint point) throws Throwable {
            Method methodSignart = ((MethodSignature) point.getSignature()).getMethod();
            TestAnnotation methodAnnotation = methodSignart.getAnnotation(TestAnnotation.class);
            if (methodAnnotation != null) {
                String methodName = methodAnnotation.methodName();
                String desc = methodAnnotation.desc();
                System.out.println("----------方法开始执行----------" + methodName);
                System.out.println("----------方法描述----------" + desc);
                Object proceed = point.proceed();
                System.out.println("----------方法执行结束----------" + methodName);
                return proceed;
            }
            return point.proceed();
        }
    
    }
    
  3. 编写测试类

    public class TestMain {
       public static void main(String[] args) {
         new Test().test("x");
    }
    }
    
    public class Test {
        @TestAnnotation
        String test(String name){
            System.out.println("exe test");
            return name;
        }
    }
    

使用动态代理(Spring AOP)实现方法日志打印

略,以后写Spring AOP实现原理的时候在写

上一篇 下一篇

猜你喜欢

热点阅读