Java元注解@Retention规则
@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规则的更多相关文章
- Java元注解—— @Retention @Target @Document @Inherited
java中元注解有四个: @Retention @Target @Document @Inherited: @Retention:注解的保留位置 @Retention(RetentionPolicy. ...
- java元注解 @Retention注解使用
@Retention定义了该Annotation被保留的时间长短: 1.某些Annotation仅出现在源代码中,而被编译器丢弃: 2.另一些却被编译在class文件中,注解保留在class文件中,在 ...
- 使用Java元注解和反射实现简单MVC框架
Springmvc的核心是DispatcherServlet来进行各种请求的拦截,进而进行后续的各种转发处理.流程图如下: 说明:客户端发出一个http请求给web服务器,web服务器对http请求进 ...
- Spring注解与Java元注解小结
注解 Annotation 基于注解的开发,使得代码简洁,可读性高,简化的配置的同时也提高了开发的效率,尤其是SpringBoot的兴起,随着起步依赖和自动配置的完善,更是将基于注解的开发推到了新的高 ...
- Java 元注解
元注解@Target,@Retention,@Documented,@Inherited * * @Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括: * Elemen ...
- Java元注解
元注解是指注解的注解,包括@Retention @Target @Document @Inherited四种. 1.@Retention: 定义注解的保留策略@Retention(RetentionP ...
- java元注解(注解在注解上的注解)
//ElementType.TYPE 给类.接口.枚举上使用 @Target(ElementType.TYPE)//给注解进行注解,表示该注解可以用在什么地方 //@Retention(Retenti ...
- Java元注解,简单案例
[注解] 程序中有 注释 和注解 * 注释:给开发人员. * 注解:给计算机看的. 注解使用:学习框架支持注解开发. [JDK提供的注解] @Override :描述方法的重写. @SuppressW ...
- java的四个元注解 @Retention @Target @Document @Inherited
1. @Retention :注解的保留位置 @Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中,在class字节码文件中不包含 @Retention( ...
随机推荐
- 高校战“疫”网络安全分享赛 Misc ez_mem&usb
打开之后是一个流量包 用wireshark导出HTTP文件,有个upload,用一下binwalk,出来了一个镜像文件 用volatility搜一下,命令里有一个密码,看见了但是后来给忘了... 文件 ...
- python25之进制转换
一.进制转换函数 bin():将十进制转换为二进制 oct():将十进制转换为八进制 hex():将十进制转换为十六进制 >>> x=1234>>> bin(x)' ...
- java 之 enum(枚举)
推荐博客 http://blog.csdn.net/javazejian/article/details/71333103
- 【集群实战】NFS网络文件共享服务3-相关知识补充(showmount,exports,rpc)
1. showmount命令说明 showmount命令一般用于从NFS客户端检查NFS服务器端共享目录的情况. 参数说明: -e,--exports 显示NFS服务器输出的目录列表 [root@we ...
- 【Linux题目】第五关
1. 如何取得/etiantian文件的权限对应的数字内容,如-rw-r-r 为644,要求使用命令取得644或0644这样的数字. 解答: 方法1:用sed获取stat filename里的属性值 ...
- mysql硬件优化
导致宕机的原因: 1. 运行环境: 35%,运行环境可以看做是支持数据库服务器运行的系统和资源集合,包括操作系统,硬盘以及网络 2. 性能:35% 3. 复制 20% 4 ...
- SQL SERVER 性能优化二: 数据库初始值大小及增长方式设置
数据库增长方式主要有两种,按百分比自动增长和按固定大小自动增长,设置初始大小和增长方式需谨慎. 初始大小就是建库的大小,设小了,容易造成磁盘碎片,频繁增长也会影响IO响应.设大了,也不行,设大了,每次 ...
- 是时候实现 SOC 2.0 了
本文讲的是是时候实现 SOC 2.0 了,SOC,安全运营中心,为取得其最佳效果,以及真正最小化网络风险,需要全员就位,让安全成为每个人的责任. 早在几年前,企业就开始创建SOC来集中化威胁与漏洞的监 ...
- H3C配置Web登陆
为什么80%的码农都做不了架构师?>>> 1.开启http服务. [H3C]ip http enable 2.创建web登陆的用户. [H3C]local-user king / ...
- windows下安装Pycham2020软件
1.在pycham官网下载安装软件https://www.jetbrains.com/pycharm/download/#section=windows 2.我下载的是64位的安装包,现在开始安装 3 ...