美文网首页
java 基础-注解学习

java 基础-注解学习

作者: A挑战未来A | 来源:发表于2019-05-23 20:00 被阅读0次

    一 元注解

    1:@Retention元注解 ,表示注解有效存在的生命周期长短,取值有如下
    • @Retention(RetentionPolicy.SOURCE)
      存在源码阶段,javac将java源码编译成.class文件后,注解失去作用。也就是当在Java源程序上加了一个注解,这个Java源程序要由javac去编译,javac把java源文件编译成.class文件,在编译成class时可能会把Java源程序上的一些注解给去掉,java编译器(javac)在处理java源程序时,可能会认为这个注解没有用了,于是就把这个注解去掉了,那么此时在编译好的class中就找不到注解了, 这是编译器编译java源程序时对注解进行处理的第一种可能情况
    • @Retention(RetentionPolicy.CLASS)
      存在源码以及.class文件阶段,类加载器将.class文件加载到内存中去的时候,注解失去作用。也就是class文件中的东西不是字节码,class文件里面的东西由类加载器加载到内存中去,类加载器在加载class文件时,会对class文件里面的东西进行处理,如安全检查,处理完以后得到的最终在内存中的二进制的东西才是字节码,类加载器在把class文件加载到内存中时也有转换,转换时是否把class文件中的注解保留下来。
    • @Retention(RetentionPolicy.RUNTIME)
      存在源码,.class文件阶段以及 内存中的字节码运行时阶段
      备注:一个注解的生命周期有三个阶段:java源文件是一个阶段,class文件是一个阶段,内存中的字节码是一个阶段,javac把java源文件编译成.class文件时,有可能去掉里面的注解,类加载器把.class文件加载到内存时也有可能去掉里面的注解,因此在自定义注解时就可以使用Retention注解指明自定义注解的生命周期,自定义注解的生命周期是在RetentionPolicy.SOURCE阶段(java源文件阶段),还是在RetentionPolicy.CLASS阶段(class文件阶段),或者是在RetentionPolicy.RUNTIME阶段(内存中的字节码运行时阶段),根据JDK提供的API可以知道默认是在RetentionPolicy.CLASS阶段 (JDK的API写到:the retention policy defaults to RetentionPolicy.CLASS.)
    2:@Target元注解

    @Target元注解决定了一个注解可以标识到哪些成分上,如标识在在类身上,或者属性身上,或者方法身上等成分,@Target默认值为任何元素(成分)

    二 注解简单使用

    创建注解
    /**
     * 使用元注解进行标注
     */
    @Target({ElementType.METHOD,ElementType.TYPE})
    @Retention(RetentionPolicy.SOURCE)
    public @interface MyAnotation {
        String color () default "green";
        String value();
    
    }
    
    注解使用
    @MyAnotation(color = "blue",value = "你好")
    public class AnotationUser {
        public void main(){
            if(AnotationUser.class.isAnnotationPresent(MyAnotation.class)){
                MyAnotation myAnotation=AnotationUser.class.getAnnotation(MyAnotation.class);
                myAnotation.color();
                myAnotation.value();
            }
        }
    }
    

    本文完全参考摘抄自注解,只为个人学习。
    参考文章java注解-最通俗易懂的讲解

    相关文章

      网友评论

          本文标题:java 基础-注解学习

          本文链接:https://www.haomeiwen.com/subject/ekxizqtx.html