通过反射获得自定义注解的值

1、简介

​ 自动JDK5之后,注解逐渐进入了大众的视野,注解对程序的完成有很好的辅助作用,极大的简化了开发步骤与操作,那么如何定义一个注解,以及注解是如何生效的呢。

​ 注解和反射是不可分割的,没有反射机制,程序就无法获得注解的值,也就无法进行后续操作,试想一下,如果我们能获得注解的值,我们就可以在后台用普通代码实现值的注入等等,这也是注解实现的简单原理。

2.定义注解

​ 要想使用自定义注解,首先要定义注解,比如我们定义一个“Annotation”,这个注解是为了一个Person类的name属性赋值。

​ 定义如下:

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface  Annotation{String value();
}

​ 如此,便定义了一个名为Annotation的注解,值得注意的是,注解的注解,也就是元注解,即上面的Target和Retention都是用来规定注解的功能的,比如@Target(ElementType.FIELD)表示这个定义的注解只在属性上有效,别的地方不能放这个注解,而@Retention(RetentionPolicy.RUNTIME)则表示运行时有效,也就是基本上任意时候都有效,除非程序执行完毕。另外常见的元注解还有@Documented和@Inherited,在此不做过多说明,感兴趣的可以自行搜索。

3.使用注解

​ 定义注解是为了使用注解,比如我们现在定义一个类。

@Data
@NoArgsConstructor
@AllArgsConstructor
class  Person{private String name;
}

​ 然后将注解加到定义的类中

@Data
@NoArgsConstructor
@AllArgsConstructor
class  Person{@Annotation(value = "张家瑞")private String name;
}

​ 这样,我们便对刚刚的注解进行了使用。

4.获取注解的值

​ 看到注解并不是我们的最终目的,我们还要让机器取到注解中的值,毕竟注解不单单是该我们自己看的,还是让机器读取的,这里我们可以通过反射来实现对注解值的获取。

public class TestT {public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException {//获取类对象Class c1 = Class.forName("top.zhang.springboot02.annotation.Person");//获取属性对象Field name = c1.getDeclaredField("name");//获取注解对象Annotation annotation = name.getAnnotation(Annotation.class);//获取注解的值String value = annotation.value();//输出注解的值System.out.println(value);}
}

​ 如此,便获得了刚刚在注解中写的“张家瑞”的值,获取注解成功,既然成功获取到了注解的值,那么后续操作自然就水到渠成了。

5.总结

​ 注解的实现与反射是紧密相连的,为了读源码,必须对注解有一定了解,为了了解注解的执行过程,必须对反射有了解,因此注解和反射是学习java必须要掌握的。

通过反射获得自定义注解的值相关推荐

  1. 通过反射动态修改自定义注解属性值

    通过反射动态修改自定义注解属性值 java/lang/reflect 这个包下面都是Java的反射类和工具. Annotation 注解,也是位于这个包里的. 注解自从Java 5.0版本引入后,就成 ...

  2. 用自定义注解做点什么——自定义注解有什么用

    用自定义注解做点什么 前言 你不一定听过注解,但你一定对@Override不陌生. 当我们重写父类方法的时候我们就看到了@Override.我们知道它表示父类方法被子类重写了. 现在告诉你,@Over ...

  3. Java注解--一张图一案例掌握自定义注解

    1.概述 是什么:是对方法.类.参数.包.域以及变量等进行代码功能的增强或者修改程序的行为等操作. 应用 跟踪代码依赖性,实现替代配置文件功能 在反射中使用Annotation,字段格式化(如:数据字 ...

  4. java获取注解的属性值_反射+自定义注解,实现获取注解标记的属性

    目标:通过自定义注解 @Ignore 注解,觉得是否读取指定类的属性. 运行结果: [main] INFO util.FruitInfoUtil -水果的名字为:entity.Apple [main] ...

  5. java 自定义注解以及获得注解的值

    1.自定义注解 import java.lang.annotation.*;@Documented @Target(ElementType.FIELD) @Inherited @Retention(R ...

  6. java运行时读取注解_Java自定义注解和运行时靠反射获取注解

    转:1.Annotation的工作原理: JDK5.0中提供了注解的功能,允许开发者定义和使用自己的注解类型.该功能由一个定义注解类型的语法和描述一个注解声明的语法,读取注解的API,一个使用注解修饰 ...

  7. Java反射自定义注解底层设计原理

    文章目录 一.反射 1. 反射概念 2. 反射机制的优缺点 3. 反射的用途 4. 反射技术的使用 5. 反射常用的Api 6. 反射执行构造函数 7. 反射执行给属性赋值 8. 反射执行调用方法 二 ...

  8. 2字节取值范围_Java注解-元数据、注解分类、内置注解和自定义注解|乐字节

    大家好,我是乐字节的小乐,上次说过了Java多态的6大特性|乐字节,接下来我们来看看Java编程里的注解. Java注解有以下几个知识点: 元数据 注解的分类 内置注解 自定义注解 注解处理器 Ser ...

  9. @value注解取不到值_教学笔记:Java注解及自定义注解示例

    现代的Java编程过程中,会经常需要使用到注解,各种流行框架,比如在使用spring进行应用构建的过程中会使用到非常多的spring注解. 本文简要谈一谈Java注解以及如何去定义自己的注解在程序中进 ...

最新文章

  1. 【转】 Android新特性介绍,ConstraintLayout完全解析
  2. 今天刚查到的宏,学习
  3. DotNet 资源大全
  4. 第二十二期:New一个对象的时候发生了什么?
  5. 网络中pkt是什么意思_网络流行语Cp、磕么?是什么意思?
  6. 风变python学习2---字符串,整数,浮点型数据分析,应用
  7. 梦笔记2021-03-05
  8. C++模板技术实现 泛型编程,通俗易懂的泛型编程教程//。
  9. 如何在PDF文件中快速查找关键字,这个方法后悔没早点知道
  10. Java实现 kiosk模式,java – 使用“kiosk模式”创建Phonegap应用程序
  11. 在部队当程序员是什么体验?
  12. 工业用科技激光SLAM拣货潜伏式AGV多层料箱机器人|海格里斯HEGERLS助你实现生产全自动化
  13. mysql实现俩个属性加减运算_mysql加减乘除
  14. fpxmocapy linke
  15. 【时序】M4竞赛冠军方案:一种用于时间序列预测的指数平滑和递归神经网络的混合方法
  16. CSS3:3D变换动画
  17. 市场营销中4P,4C的区别
  18. 摄像头移植简述(mtk)
  19. Python学习笔记:7.5.8 Django快速建站 - Web开发实战 微信公众号开发3
  20. APS为何成为制造企业困境中的“救命稻草”?

热门文章

  1. 映客都是互刷礼物吗_iOS 动画队列—仿映客刷礼物效果
  2. c语言的生日祝福程序,c语言祝福生日快乐
  3. AD那些事儿——阻焊层和助焊层的区别
  4. http状态码521——记一次网页爬取
  5. XSLT转换器的使用(Xalan和Saxon)
  6. Halcon显示彩色3D模型
  7. Mybatis中的常用标签
  8. ansible——playbook剧本概念及示例
  9. 倍福模块维修倍福控制器维修CX1030-0123
  10. Python菜鸟--列表(List)