@Retention注解

From: https://blog.csdn.net/asdgbc/article/details/70196749

日常开发中经常用到注解,所以也会经常使用到@Retention注解,写下这篇文章做个记。
Reteniton的作用是定义被它所注解的注解保留多久,一共有三种策略,定义在RetentionPolicy枚举中

public enum RetentionPolicy {
    SOURCE,
    CLASS,
    RUNTIME
}

    1
    2
    3
    4
    5

    SOURCE
    被编译器忽略

    CLASS
    注解将会被保留在Class文件中,但在运行时并不会被VM保留。这是默认行为,所有没有用Retention注解的注解,都会采用这种策略。

    RUNTIME
    保留至运行时。所以我们可以通过反射去获取注解信息。

下面,我们通过一个例子去验证一下。我定义了不同策略的注解去注解了三个方法

@Retention(RetentionPolicy.SOURCE)
public @interface SourceLevel {
}
@Retention(RetentionPolicy.CLASS)
public @interface ClassLevel {
}
@Retention(RetentionPolicy.RUNTIME)
public @interface RuntimeLevel {
}

public class Test {

    @SourceLevel
    public void sourceLevel(){}
    @ClassLevel
    public void classLevel(){};
    @RuntimeLevel
    public void runtimeLevel(){};

}

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21

通过javap获取到Test类的字节码

public void sourceLevel();
    descriptor: ()V
    flags: ACC_PUBLIC
    Code:
      stack=0, locals=1, args_size=1
         0: return
      LineNumberTable:
        line 5: 0

  public void classLevel();
    descriptor: ()V
    flags: ACC_PUBLIC
    Code:
      stack=0, locals=1, args_size=1
         0: return
      LineNumberTable:
        line 7: 0
    RuntimeInvisibleAnnotations:
      0: #11()

  public void runtimeLevel();
    descriptor: ()V
    flags: ACC_PUBLIC
    Code:
      stack=0, locals=1, args_size=1
         0: return
      LineNumberTable:
        line 9: 0
    RuntimeVisibleAnnotations:
      0: #14()

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31

我们可以看到
1. 编译器并没有记录下sourceLevel方法的注解信息
2. 编译器分别使用了RuntimeInvisibleAnnotations和RuntimeVisibleAnnotations属性去记录了classLevel和runtimeLevel的注解信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[翻译]:怎样从C/C++代码中对C#进行回调

声明:网络上类似的中文博客大有存在,本人知识水平有限,业余爱好,也是为了备份收藏How to make a callback to C# from C/C code 本着共享知识的初衷,翻译一份给大家参考,为了便于阅读不至于拗口,没有按照原…

android thread实例

http://blog.csdn.net/awebkit/article/details/6982748

Linux Centos关机命令

centos关机命令: 1、halt 立马关机 2、shutdown -h 10 1分钟后自动关机 3、poweroff 立刻关机,并且电源也会断掉 4、shutdown -h now 立刻关机(root用户使用) 如果是通过shutdown命令设置关机的话,可以用shutdown -c命令取消重启转载于:https://www.cnbl…

RedisTemplate和StringRedisTemplate使用

From: https://blog.csdn.net/qiesheng/article/details/83897634 //向redis里存入数据和设置缓存时间 stringRedisTemplate.opsForValue().set("test", "100",60*10,TimeUnit.SECONDS); //val做-1操作 stringRedisTemplate.boundValueOps("test&q…

linux中yum搭建与配置

服务器配置:1、把光盘中的内容全部拷到/var/ftp/Server/中mount /dev/cdrom /mnt //挂载光盘rpm -ivh /mnt/Packages/vsftpd-2.2.2-11.el6.i686.rpm //安装vsftpd cp -rf /mnt/Packages /var/ftp/Server //复制光盘rpm包到本地2、安装createreporpm -…

数据结构:二叉查找树(C语言实现)

数据结构:二叉查找树 二叉查找树 基础知识 关于二叉树的基础知识,请看我的一篇博客:二叉树的链式存储 二叉查找树的特征 二叉查找树或者是一棵空树,或者是具有下列性质的二叉树:  1.若其左子树不空,则左子树上所有结…

Effective Java 电子书 apk版本下载

下载安装包以后,安装即可阅读该书了,并且实时展示每章节代码哦,并且可以运行哦,赶快下载体验吧. Effective Java中文第二版下载地址:下载 应用截图: 转载于:https://www.cnblogs.com/spring87/p/6090010.ht…

SpringBoot解决ajax跨域问题

From: https://www.jianshu.com/p/e57ed1ee3070 利用注解的方式解决AJAX请求跨域问题一、第一种方式: 1、编写一个支持跨域请求的 Configuration import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.…

dataguru北京线下沙龙-第二部 《Oracle 索引优化思路--案例分享 -- 刘盛》

【视频:dataguru北京线下沙龙-第二部 《Oracle 索引优化思路--案例分享 -- 刘盛》 /微笑】

1^2+2^2+……+n^2的公式证明

求^2就从^3入手,求^3就从^4入手,求^t就从^(t1)入手 因为(n1)^3n^33n^23n1 所以2^31^33*1^23*11 3^32^33*2^23*21 …… (n1)^3n^33n^22n1 所以2^33^3……(n1)^31^32^3……3*(1^22^2……^2)3(12……n)(11……1) 所以3(1^22^2……n^2)n^33n^22n1-a-3-[n(n1)]/2-n 所以S(An)1^22^2……

mysql 数据库授权(给某个用户授权某个数据库)

先设置该用户只有show database权限grant select,insert,update,delete on redmine1.* to jira"%" identified by "jira";授权命令GRANT 语句的语法如下:GRANT privileges (columns)ON whatTO user IDENTIFIEDBY "password"WITH GRAN…

Nginx突破高并发的性能优化 - 运维笔记

在日常的运维工作中,经常会用到nginx服务,也时常会碰到nginx因高并发导致的性能瓶颈问题。今天这里简单梳理下nginx性能优化的配置(仅仅依据本人的实战经验而述,如有不妥,敬请指出~) 一、这里的优化主要是指…

给你的Mr.Right画张择偶地图像

爱一个人就算做不到爱他的全部,至少也应该尊重他的真实,而不是苛求他变成你想要的样子。 娶妻当娶郭芙蓉,经典语录。我是郭芙蓉,我不会武功,我来自江湖,我与众不同。再苦再累,就当自己是二百五&…

ISO13485给企业带来的益处

1、ISO13485变强制性认证,日益受到欧美和中国政府机构的重视,有利于消除国际贸易中的技术壁垒,是进入国际市场的通行证; 2、提高和改善企业的管理水平,增加企业的知名度; 3、提高和保证产品的质量水平&…

[HDOJ5289]Assignment(RMQ,二分)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid5289 题意&#xff1a;求满足区间内最大值和最小值差为k的区间个数。 预处理出区间的最值&#xff0c;枚举左端点&#xff0c;根据最值的单调性二分枚举右端点&#xff0c;使得找到最右侧max-min<k&#xff…

java实现HTTP请求的三种方式

From: https://www.cnblogs.com/hhhshct/p/8523697.html 目前JAVA实现HTTP请求的方法用的最多的有两种&#xff1a;一种是通过HTTPClient这种第三方的开源框架去实现。HTTPClient对HTTP的封装性比较不错&#xff0c;通过它基本上能够满足我们大部分的需求&#xff0c;HttpClien…

ActiveMQ queue 代码示例

生产者&#xff1a; package com.111.activemq;import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.TextMessa…

SpringBoot时间戳与MySql数据库记录相差14小时排错

From: http://www.cnblogs.com/jason1990/archive/2018/11/28/10032181.html 项目中遇到存储的时间戳与真实时间相差14小时的现象,以下为解决步骤. 问题 CREATE TABLE incident (id int(11) NOT NULL AUTO_INCREMENT,created_time timestamp NOT NULL DEFAULT CURRENT_TIMES…

HDU 1233 还是畅通工程(最小生成树)

传送门 还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 41447 Accepted Submission(s): 18920 Description 某省调查乡村交通状况&#xff0c;得到的统计表中列出了任意两村庄间的距离。省政府“畅…

出了本练内功的书:《完美软件开发:方法与逻辑》

首先说下什么叫“完美软件开发”&#xff0c;想象一下&#xff0c;完美的圆在现实中是不存在的&#xff0c;现实中的圆只能是对完美的圆的回归&#xff0c;但完美的圆描述了圆的构成规则&#xff0c;完美软件开发意义与此相同&#xff0c;它试图描述软件开发的规则和铁律。但既…