Java实现自定义注解

Java实现自定义注解前言 nbsp nbsp nbsp nbsp 上一篇文章介绍了注解的一些基本知识 这次来介绍下如何实现自定义注解及注解如何使用 正文 nbsp nbsp nbsp nbsp 注解是一种能被添加到 java 源代码中的元数据 方法 类 参数和包都可以用注解来修饰 注解可以看作是一种特殊的标记 可以用在方法 类 参数和包上 程序在编译或者运行时可以检测到这些标记而进行一些特殊的处理

前言

     上一篇文章介绍了注解的一些基本知识,这次来介绍下如何实现自定义注解及注解如何使用。

正文

     注解是一种能被添加到java源代码中的元数据,方法、类、参数和包都可以用注解来修饰。注解可以看作是一种特殊的标记,可以用在方法、类、参数和包上,程序在编译或者运行时可以检测到这些标记而进行一些特殊的处理。

注解的基本元素

     声明一个注解要用到的东西

  • 修饰符
      访问修饰符必须为public,不写默认为pubic;

  • 关键字
      关键字为@interface;

  • 注解名称
      注解名称为自定义注解的名称,使用时还会用到;

  • 注解类型元素
      注解类型元素是注解中内容,可以理解成自定义接口的实现部分;

public @interface Info { String value() default "tracy"; boolean isDelete(); } 

使用元注解修饰注解

Target类型 描述
ElementType.TYPE 应用于类、接口(包括注解类型)、枚举
ElementType.FIELD 应用于属性(包括枚举中的常量)
ElementType.METHOD 应用于方法
ElementType.PARAMETER 应用于方法的形参
ElementType.CONSTRUCTOR 应用于构造函数
ElementType.LOCAL_VARIABLE 应用于局部变量
ElementType.ANNOTATION_TYPE 应用于注解类型
ElementType.PACKAGE 应用于包
ElementType.TYPE_PARAMETER 1.8版本新增,应用于类型变量)
ElementType.TYPE_USE 1.8版本新增,应用于任何使用类型的语句中(例如声明语句、泛型和强制转换语句中的类型)

@Retention
  表明该注解的生命周期

生命周期类型 描述
RetentionPolicy.SOURCE 编译时被丢弃,不包含在类文件中
RetentionPolicy.CLASS JVM加载时被丢弃,包含在类文件中,默认值
RetentionPolicy.RUNTIME 由JVM 加载,包含在类文件中,在运行时可以被获取到

@Document
  表明该注解标记的元素可以被Javadoc 或类似的工具文档化
@Inherited
  表明使用了@Inherited注解的注解,所标记的类的子类也会拥有这个注解






@Target({ElementType.FIELD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Info { String value() default "tracy"; boolean isDelete(); } 

使用自定义注解

配置注解

    定义了一个Person类

@Data @Builder // 为Person类配置了刚刚定义的注解@Info @Info(isDelete = true) public class Person { / * 姓名 */ private String name; / * 年龄 */ private int age; / * 是否有效 */ private boolean isDelete; } 

利用反射解析注解

 public class AnnotationTest { public static void main(String[] args) { try { //获取Person的Class对象 Person person = Person.builder().build(); Class clazz = person.getClass(); //判断person对象上是否有Info注解 if (clazz.isAnnotationPresent(Info.class)) { System.out.println("Person类上配置了Info注解!"); //获取该对象上Info类型的注解 Info infoAnno = (Info) clazz.getAnnotation(Info.class); System.out.println("person.name :" + infoAnno.value() + ",person.isDelete:" + infoAnno.isDelete()); } else { System.out.println("Person类上没有配置Info注解!"); } } catch (Exception e) { e.printStackTrace(); } } } 
//返回指定的注解 getAnnotation //判断当前元素是否被指定注解修饰 isAnnotationPresent //返回所有的注解 getAnnotations 

参考文章

https://blog.csdn.net/xsp_happyboy/article/details/80987484


https://blog.csdn.net/Dufresne311/article/details/
https://segmentfault.com/a/1190000018209300




总结

     Java 中自定义注解的实现就先介绍到这里了,感谢阅读~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/204514.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午8:08
下一篇 2026年3月19日 下午8:08


相关推荐

  • 百度文心大模型4.5系列全面开源,10款模型及API服务同步上线

    百度文心大模型4.5系列全面开源,10款模型及API服务同步上线

    2026年3月12日
    3
  • 【Stimulsoft Reports.WPF教程】保存并加载Designer的事件

    【下载StimulsoftReports.WPF最新版本】此示例显示如何在代码中使用“Save”和“Load”事件。您可以在应用程序初始化时将事件侦听器添加到StiOptions.Engine.GlobalEvents:publicWindow1(){StiOptions.Wpf.CurrentTheme=StiOptions.Wpf.Themes.Office20…

    2022年4月9日
    50
  • Ubuntu18.04下安装Pytorch-GPU(超详细自己安装全过程)「建议收藏」

    Ubuntu18.04下安装Pytorch-GPU(超详细自己安装全过程)「建议收藏」硬件环境:自己的笔记本电脑CPU:i5-4210MGPU:NVIDIAgeforce920M1Anaconda3的安装与配置1.1下载可以到Anaconda官网下载历史版本:https://repo.anaconda.com/archive/国内的下载速度可能比较慢,选择到清华大学开源软件镜像站下载。我使用的python3.6.9,下载对于的Anaconda版本是5.1…

    2026年4月14日
    6
  • android4.4.3_安卓内核版本升级

    android4.4.3_安卓内核版本升级Android4.4源码下载(linux合并)==============================分割线结束=========================旧版本的可以使用115,不想再去115搬运了4g多不是很想上传邮箱吱吱的响受不了,上传下吧,要学会摆脱windows不会linux玩android也没少哈意思,不是?下载所有的droiSplit包split分割的,。wi…

    2022年8月10日
    11
  • activity生命周期有几种状态_activity生命周期七种方法

    activity生命周期有几种状态_activity生命周期七种方法activity生命周期(这篇足够了)摘要做安卓开发已经4年多了,所接触的知识点也比较零散,在这里记录一下android方面的知识点,方便自己以后复习,有什么不足的,以及错误的欢迎拍砖。activityactivity从开始到结束的四个状态。activity的生命周期。activity的进程优先级。activity的四个状态关于activity的…

    2022年8月16日
    6
  • mysql 拖库_【渗透测试】温故知新之拖库七种方法

    mysql 拖库_【渗透测试】温故知新之拖库七种方法参考 Aspcms 框架拿 webshell 该管理页面存在数据库备份模块 通过菜刀查到了数据库模块备份的文件目录 由于不知道数据库文件的大小 最通用稳定的方法是 将数据库复制一份复制到上一层目录下 重命名为 rar 文件 将下载的 rar 文件重命名为 mdb 后缀 然后打开辅臣数据库软件 点击打开数据库导入 mdb 文件 可看到正常打开后读取到数据库所有信息 方法 2 mysqldump 拖库该方法在 kali lin

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号