java注解详解

一,基本语法
首先,我们先来定义一个最简单的没有元素的注解,称为标记注解。

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

它就像一个空接口。定义注解时会需要一些元注解。@Retention用来定义该注解在哪一个级别可用,在源代码中(SOURCE),类文件中(CLASS),或者运行时(RUNTIME)。@Target用来定义你的注解用在什么地方(例如一个方法或者一个域。
下面再写一个有元素的简单注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UserCase {
    public int id();
    public String description() default "no description";
}

二,编写注解处理器
注解对语义没有直接的影响,它们只负责提供信息供相关的程序使用。注解永远不会改变被注解代码的语义。我们需要编写注解处理器来为注解添加相应的逻辑。
我们在日常项目的开发中,不得不处理的就是异常。我们需要编写一个异常处理器来对异常进行相应的处理。

首先,编写一个注解,参数类型为Class对象的数组。

   @Retention(RetentionPolicy.RUNTIME)
   @Target(ElementType.METHOD)
    public @interface ExceptionTest {
        Class<? extends Exception>[] value();
    }

再编写一个注解处理器

public static void test(Class<?> testClazz) {
        for (Method m : testClazz.getDeclaredMethods()) {
            if (m.isAnnotationPresent(ExceptionTest.class)) {
                try {
                    m.invoke(testClazz.newInstance());
                } catch (Throwable wrappedExc) {
                    Class<? extends Exception>[] excTypes = m.getAnnotation(ExceptionTest.class).value();
                    for(Class<? extends Exception> excType : excTypes){
                        if(excType.isInstance(wrappedExc)){
                            System.out.println("处理相应逻辑");
                        }
                    }

                }
            }
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值