注解和反射如何配合使用

128 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

配合反射特性使用注解

我们已经知道了,注解如果想发挥其最大化的效用,就要配合java 中的反射特性一起使用。注解+反射,可以完成不修改原本业务代码逻辑的情况下完成一些自定义的逻辑。那么如何使注解+反射一起配合使用呢?我们举个例子来看一下。

那我们首先来自定义一个注解,设置其生效时间为运行期:

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ExampleAnnotation {
}

然后声明一个自定义类,我们将这个注解应用到这个类的方法上:

public class ExampleClass {
    @ExampleAnnotation
    public void exampleMethod() {
        System.out.println("this is the test method");
    }
}

然后我们到main 方法中使用反射去获取标记到exampleExample 类的exampleMethod 方法上的注解:

public class ExampleApplication {
   public static void main(String[] args) throws NoSuchMethodException {
      ExampleClass exampleClass = new ExampleClass();
      Class clazz = exampleClass.getClass();
      Annotation[] list = clazz.getMethod("exampleMethod").getDeclaredAnnotations();
      System.out.println("the annotation size is: " + list.length);
   }
}

输出结果为:

1

通过这个例子来看,我们可以清楚地认识到,注解其实就是一个标注,上面的例子是把注解标注到了方法上,我们就可以以这个类为出发点,以反射的方式从这个方法上获取标注的注解的信息。标注了多少个注解,其实是都可以获得到的。这个例子只是一个简单的说明,其实注解+反射有很多高级玩法,这里只是带领读者做一个小小的入门,让读者有个比较清晰直观的概念。

我们在使用注解的时候,更多的时候还会在声明注解的时候添加很多参数进去,通过这些参数来做为自己定义的一些业务逻辑的条件上的区分。

总结

注解的这种标记有很多特性,所以这些特性可以用到很多很多的地方,可以对很多场景有很好的应对措施。

之后的文章我们就结合注解的参数与反射,来举例说明注解的更好的应用方式。