java注解Annotation

Posted 扶不起的刘阿斗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java注解Annotation相关的知识,希望对你有一定的参考价值。

大纲:

  1. 自定义注解
  2. 从注解上获取值

 

一、自定义注解

@Target({ElementType.TYPE,ElementType.FIELD}) //注解作用在哪里,这里是类上和变量上
@Retention(RetentionPolicy.RUNTIME) //注解生命周期,这里是运行时
@Inherited //注解的子类和动态代理类也会拥有这个注解
public @interface MyAnn {
    //默认值value,这个属性名比较特殊@MyAnn("xxx"),这里xxx就是这个value
    String value();
    //注解值有很多(可以是数组,枚举或者其他注解等),还可以设置默认值
    int age() default 0;
    String[] parentsName() default {};
}

 

二、从注解上获取值

 例子中使用到我们上面我们自定义的注解

@MyAnn(value = "haha",age = 3,parentsName = {"zhangsan","lisi"})
public class Client {

    @MyAnn(value = "hehe",age = 5,parentsName = {"wangwu","zhaoliu"})
    private static String name;

    public static void main(String[] args) throws NoSuchFieldException {
        //获取类上的注解
        final Class<Client> clazz = Client.class;
        final MyAnn annotationClass = clazz.getAnnotation(MyAnn.class);
        System.out.println(annotationClass.age());//3
        System.out.println(Arrays.toString(annotationClass.parentsName()));//[zhangsan, lisi]
        System.out.println(annotationClass.value());//haha

        //获取成员变量上的注解
        final Field name = clazz.getDeclaredField("name");
        final MyAnn annotationField = name.getAnnotation(MyAnn.class);

        System.out.println(annotationField.age());//5
        System.out.println(Arrays.toString(annotationField.parentsName()));//[wangwu, zhaoliu]
        System.out.println(annotationField.value());//hehe
    }
}

上例中通过反射拿到class和field,然后获取注解。

注:注解还可以定义到其他地方,取值的方式和上例类似。

以上是关于java注解Annotation的主要内容,如果未能解决你的问题,请参考以下文章

JAVA注解Annotation

java EE中的hello1.java及Annotation(注解)

Java自定义注解Annotation的使用

JAVA - Annotation 注解 入门

Java 注解 (Annotation)

注解(Annotation)