@Retention是java当中的一个元注解,该元注解通常都是用于对软件的测试

1、适用方式:

    @Retention(RetentionPolicy.RUNTIME)

    @interface Task{.......}

    参数RetentionPolicy.RUNTIME就说明了,@Task注解在程序运行时是可见的

    RetentionPolicy的枚举类型还有SOURCE、CLASS分别指定注解对于那个级别是可见的,但是

    我们一般都是用RUNTIME,因为这是在程序运行时可以对注解进行读取,从而易于软件的测试

2、接下来我们要先介绍一下java程序的内省和反射机制,之后在讨论@Retention的具体用法实例

   在java虚拟机JVM在运行时,就会将类进行加载,这时,每个类都会生成一个Class数据类型的

   对象(Class类在java.lang.Class中),这个对象就是对应类的“运行时对象”,通过这个

   运行时对象,就能够获取对应类的许多信息,也就是说,运行时对象实际就是对应类的一个映射

   这就java的内省反射机制

 

 

3、接下来我们讨论一下,这个Class运行时对象的使用

   ①获取对应类的Class数据类型的运行时对象的引用——getClass()

     public class Point{.....} //声明一个类

     Point pt = new Point(); //创建对应类的实例对象

     Class cls = pt.getClass() ;    //则cls 就指向了Point类的运行时对象

   ②运行时对象cls的成员函数

     <1>public String  getName()

        返回对应类的类名

     <2>public boolean isAnnotationPresent(注解名.class)

     判定指定的"注解"是否在运行时注解了 cls 的对应类

     <3>public boolean isAnnotation();

     判定cls 是否在运行时被任何注解 注解过

     <4>public A getAnnotation(注解名.class)

     A 指的是一个注解的类型,具体用法如下:

     @Retention(RetentionPolicy.RUNTIME) //指定@Task运行时可见

     @interface Task{String descirption(); }

     @Task(descroption="NoFinished")   //为computer作注

     class Computer{.....} 

 

     则  Computer my = new Computer() ;

         Class cls = my.getClass() ;

         Task tk = (Task) cls.getAnnotation(Task.class);

         //这时 tk 就指向了标注Computer的注解@Task

         tk.description(); //调用@Task中的description(),输出"NoFinishing"

    <5> public Method[] getMethods()

        返回由对应类中的所有的方法形成的Method数组,每个Method对象都唯一对应

        一个对应类中的方法,通过Method[i]就可以获得对应方法的信息

        (Method类在java.lang.reflect.Method中)

3、这个Method类也有很多成员方法,用来获取对应的方法的信息

   如也有:

       public boolean isAnnotationPresent(注解名.class)

       判定对应的方法是否被指定的注所注解

       public A getAnnotation(注解名.class)

       用法和上面的讲述的一样,之不过创建的注解型的引用变量指向的是 "标记对应方法的注解"

 

 

4、上面将所有的成员方法只有在注解运行时可见的情况下才能够发挥作用,

    所以@Retention变得很有用

@Retention的用法实例:

  

运行结果:

 

Java元注解@Retention规则的更多相关文章

  1. Java元注解—— @Retention @Target @Document @Inherited

    java中元注解有四个: @Retention @Target @Document @Inherited: @Retention:注解的保留位置 @Retention(RetentionPolicy. ...

  2. java元注解 @Retention注解使用

    @Retention定义了该Annotation被保留的时间长短: 1.某些Annotation仅出现在源代码中,而被编译器丢弃: 2.另一些却被编译在class文件中,注解保留在class文件中,在 ...

  3. 使用Java元注解和反射实现简单MVC框架

    Springmvc的核心是DispatcherServlet来进行各种请求的拦截,进而进行后续的各种转发处理.流程图如下: 说明:客户端发出一个http请求给web服务器,web服务器对http请求进 ...

  4. Spring注解与Java元注解小结

    注解 Annotation 基于注解的开发,使得代码简洁,可读性高,简化的配置的同时也提高了开发的效率,尤其是SpringBoot的兴起,随着起步依赖和自动配置的完善,更是将基于注解的开发推到了新的高 ...

  5. Java 元注解

    元注解@Target,@Retention,@Documented,@Inherited * * @Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括: * Elemen ...

  6. Java元注解

    元注解是指注解的注解,包括@Retention @Target @Document @Inherited四种. 1.@Retention: 定义注解的保留策略@Retention(RetentionP ...

  7. java元注解(注解在注解上的注解)

    //ElementType.TYPE 给类.接口.枚举上使用 @Target(ElementType.TYPE)//给注解进行注解,表示该注解可以用在什么地方 //@Retention(Retenti ...

  8. Java元注解,简单案例

    [注解] 程序中有 注释 和注解 * 注释:给开发人员. * 注解:给计算机看的. 注解使用:学习框架支持注解开发. [JDK提供的注解] @Override :描述方法的重写. @SuppressW ...

  9. java的四个元注解 @Retention @Target @Document @Inherited

    1.  @Retention  :注解的保留位置 @Retention(RetentionPolicy.SOURCE)  //注解仅存在于源码中,在class字节码文件中不包含 @Retention( ...

随机推荐

  1. EOS基础全家桶(八)jungle测试网的使用

    简介 前面我们已经学习了一些EOS的基础知识了,但是在EOS主网上的很多操作(比如:抵押.赎回.买卖内存)都是需要EOS链被正式激活后才可使用,而激活EOS链还需要很多的准备操作,我打算在单独的一篇文 ...

  2. 判断一个字符串是否是合法IP地址

    # -*- coding: utf-8 -*- """ @File:test06_判断ip地址是否合法.py @E-mail:364942727@qq.com @Time ...

  3. 资料整理:python接口类

    1开发原则(七大原则) 一:开放封闭原则 二:接口隔离原则(将不同接口对象一一展现出来,分别调用各自的接口,完成各自的功能) 三:依赖倒置原则 高级模块不能依赖低级模块,可以依赖抽象 规范的定义: 高 ...

  4. Java 理解类加载过程 -- 自定义加载器

    类加载器可以看下我的收藏: https://www.cnblogs.com/dongguacai/p/5879931.html 现在准备一个字节码文件: 自定义加载器: package com.xzl ...

  5. gojs去水印

    重点在go.js文件中将这个方法中的代码注释掉即可 搜索关键字 7ca11abfd022028846 然后注释下列代码,注释前先整理JS格式 function ni() { if(th) { var ...

  6. 利用python画出动态高优先权优先调度

    之前写过一个文章. 利用python画出SJF调度图 动态高度优先权优先调度 动态优先权调度算法,以就绪队列中各个进程的优先权作为进程调度的依据.各个进程的优先权在创建进程时所赋予,随着进程的推进或其 ...

  7. Spring Boot中使用@JsonComponent

    文章目录 序列化 反序列化 在同一个class中序列化和反序列化 Spring Boot中使用@JsonComponent @JsonComponent 是Spring boot的核心注解,使用@Js ...

  8. ZK安装、ZK配置、ZK集群部署踩过的大坑

    天天采坑.来来咱们一起来填zookeeper的坑呀!! 解决坑一定要注意zk根目录下的神器,那就是logs目录下的日志, 第一坑:错误: 找不到或无法加载主类 org.apache.zookeeper ...

  9. Eclipse Mac OS版 卸载svn插件subclipse

    点击Eclipse -> About Eclipse 在打开的窗口中点击Installation Details(安装细节) 在Installed Software标签窗口中,选中Subclip ...

  10. ajax无刷新上传和下载

    关于ajax无刷新上传和下载 这是一个没什么含量但是又用的比较多又不得不说的问题,其实真的不想说,因为没什么好说的. 关于上传 1.使用Flash,ActiveX 上传 ,略... 2.自己写XMLH ...