java进阶之自定义注解

Java 重试框架 Spring-Retry | 进阶使用 - listener及自定义注解 Java 重试框架 Spring Retry 进阶使用 - 监听器及自定义注解。 阅读详情

一、简介

注解是Java 1.5引入的,可以提供代码的额外信息,目前正在被广泛应用。除了Java内置注解,我们也可以自定义注解。

以下就是一个自定义注解的简单例子:

@Target(ElementType.TYPE) //注解作用于类型(类,接口,注解,枚举)@Retention(RetentionPolicy.RUNTIME) //运行时保留,运行中可以处理@Inherited// 注解将被用于该类的子类@Documented// 生成javadoc文件public @interfaceJsAnnotation { String DEFAULT_VALUE = "JS"; /** * 创建此value方法,则使用注解时可直接传参,如 @JsAnnotation("msg") * * @return */ String value default DEFAULT_VALUE;

}

自定义注解关键点:

@interface关键字定义注解

注解可以被其它注解修饰,最重要的就是元注解

注解和接口类似,内部可以定义常量和方法

注解定义的方法有一些限制:方法不能有参数;返回值只能是基本类型、字符串、Class、枚举、注解、及以上类型的数组;可以包含默认值

小编是一个有着5年工作经验的java程序员,对于java,自己有做资料的整合,一个完整学习java的路线,学习资料和工具,相信这里有很多学习java的小伙伴,我创立了一个2000人学习扣群,479121291。每晚都有java的直播课程。无论是初级还是进阶的小伙伴小编我都欢迎!

二、元注解介绍

元注解就是定义注解的注解。

包含@Target、@Retention、@Inherited、@Documented这四种

1、@Target

描述注解的使用目标。

其源码为:

@Documented@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.ANNOTATION_TYPE}) public @interfaceTarget { ElementType[] value;

}

注解方法返回值是ElementType[],ElementType枚举类型,枚举值就是@Target注解的可取值。

方法名value,这样在使用注解时,可以不需要指定方法名。

可取的值有:

取值含义

ElementType.PACKAGE注解作用于包

ElementType.TYPE注解作用于类型(类,接口,注解,枚举)

ElementType.ANNOTATION_TYPE注解作用于注解

ElementType.CONSTRUCTOR注解作用于构造方法

ElementType.METHOD注解作用于方法

ElementType.PARAMETER注解作用于方法参数

ElementType.FIELD注解作用于属性

ElementType.LOCAL_VARIABLE注解作用于局部变量

注意:默认可以作用于以上任何目标。

2、@Retention

描述注解的生命周期。

其源码为:

@Documented@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.ANNOTATION_TYPE}) public @interfaceRetention { RetentionPolicy value;

}

注解方法返回值是枚举类型RetentionPolicy,枚举值就是@Retention注解的可取值。

可取的值有:

取值含义

RetentionPolicy.SOURCE源码中保留,编译期可以处理

RetentionPolicy.CLASSClass文件中保留,Class加载时可以处理

RetentionPolicy.RUNTIME运行时保留,运行中可以处理

默认RetentionPolicy.CLASS 值。

3、@Documented

描述注解可以文档化,是一个标记注解。

在生成javadoc的时候,是不包含注释的,但是如果注解被@Documented修饰,则生成的文档就包含该注解。

其源码为:

@Documented@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.ANNOTATION_TYPE}) public @interfaceDocumented { }

4、@Inherited

标记注解,使用@Inherited修饰的注解作用于一个类,则该注解将被用于该类的子类。

其源码为:

@Documented@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.ANNOTATION_TYPE}) public @interfaceInherited { }

三、自定义注解示例

1、定义注解

@Target(ElementType.TYPE) //注解作用于类型(类,接口,注解,枚举)@Retention(RetentionPolicy.RUNTIME) //运行时保留,运行中可以处理@Inherited// 注解将被用于该类的子类@Documented// 生成javadoc文件public @interfaceJsAnnotation { String DEFAULT_VALUE = "JS"; /** * 颜色枚举 * * @author peida */enum Color {

BULE, RED, GREEN

} /** * 创建此value方法,则使用注解时可直接传参,如 @JsAnnotation("msg") * * @return */ String value default DEFAULT_VALUE; /** * 此方法返回为枚举类型,使用注解时,如 @JsAnnotation(color=Color.BLUE) * * @return */ Color color default Color.BULE; int num default -1;

}

其中:定义了三个方法,三个方法都有默认返回值。定义了Color枚举(因为注解的方法可以返回枚举类型)

这里注意:

- value方法:使用注解时可直接传参,如 @JsAnnotation(“msg”)

- 普通方法:使用注解时,如 @JsAnnotation(color=Color.BLUE)

2、使用注解

@JsAnnotation("jia shuai") publicclass AnnotationTest {

}

或

@JsAnnotation(num = 100) publicclass AnnotationTest {

}

或

@JsAnnotation(color = Color.BLUE) publicclass AnnotationTest {

}

3、获取注解

public static void main(String[] args) {

AnnotationTest test = new AnnotationTest; Class tClass = test.getClass; JsAnnotation jsAnnotation = (JsAnnotation) tClass.getAnnotation(JsAnnotation.class); System.out.println(jsAnnotation.value); System.out.println(jsAnnotation.color); System.out.println(jsAnnotation.num); }

java进阶|基于springAop和自定义注解进行方法的耗时统计 本想着基于aop做些比较实际一点的业务场景,但是服务器不给力,暂时没法连接上了,额,这也是自己没有去写其它内容的客观原因之一了,因为涉及不了数据库层面,所以慢慢拖到了现在,也... 阅读详情

相关推荐

Java框架技术核心基石系列教程(16)——自定义注解进阶

在使用框架时通常使用注解的方式进行自动注入。可是,这些自动注入是怎么实现的呢?在此,我们使用自定义注解并结合反射实现该过程。

谷哥的小弟 456

Java注解

Java注解

秦矜のblog 817

差分隐私(Differential Privacy)

差分隐私,拉普拉斯机制和高斯机制的证明

Michale_L的博客 1万+

Java基础 自定义注解的使用 (小白进阶之路)

1—Java基础 自定义注解的使用 注解(Annotation)概述 常见的Annotation示例 自定义Annotation JDK中的元注解 利用反射获取注解信息(在反射部分涉及) JDK 8中注解的新特性 2—注解 (Annotation) 概述 从JDK5.0开始,Java增加了对元数据的(MetaDate)的支持,也就是Annotation(注解) Annotation其实就是代码里的一个**特殊标记**,这些标记可以在编译、类加载、运行时被读取、并执行相应的处理。通过使用Annot

w18861355213的博客 348

因果机器学习在农业决策中的应用:从预测到干预的范式转变

机器学习通过挖掘数据中的复杂模式,在预测任务上表现出色,但其核心关注的是变量间的相关关系。然而,在农业等复杂系统中,理解变量间的因果关系对于制定有效干预措施至关重要。因果推断提供了从“关联”到“因果”的数学框架,旨在揭示干预如何导致结果变化。因果机器学习融合了二者的优势,利用机器学习强大的数据处理能力服务于因果效应的精准估计,同时借助因果思维提升模型的稳健性和可解释性。这一技术价值在于,它能回答“如果采取某项措施,结果会怎样”的决策核心问题,从而支持精准农业、政策评估和个性化农艺推荐。在农业领域,这具体应用

weixin_31211977的博客 577

Copula函数实战:如何用MATLAB计算气象干旱与农业干旱的联合概率?

本文提供了一份基于MATLAB的Copula函数实战指南,详细阐述了如何利用该多变量联合分布函数计算气象干旱与农业干旱的联合概率及条件概率。通过从数据预处理、边缘分布拟合到Copula模型选择与检验的完整流程,帮助环境科学与农业气象研究者量化干旱事件的关联风险,为风险评估提供定量依据。

weixin_29213655的博客 431

通过Class进行反射取注解值

//简单的列举反射取注解/注解Value 常用方法 //通过 class路径、分类(类、方法、字段) //packageFile:类全路径 public static void test(String packageFile) { try { Class c = Class.forName(packageFile);//取到指定的Clas...

qq_35594465的博客 1246

APM32取代STM32的经验分享

我仔细检查了代码中与硬件相关的部分,例如外设寄存器的访问和中断处理程序的设置,并进行了相应的修改。在本文中,我将分享我将APM32引入项目中取代STM32的经验,并提供相应的源代码。我查看了APM32的官方网站、开发者论坛和相关社交媒体,了解了开发者社区的活跃度和可用的资源。总结起来,将APM32替换STM32的过程需要经过几个关键步骤:了解APM32的规格和功能、评估软件生态系统、迁移代码和调试,以及性能和功耗优化。在开始替换之前,我对APM32进行了详细的研究和评估,以确保它能够满足项目的需求。

UplKubernetes的博客 2006

java注解与反射(4)——四种获取class对象的方法,通过class对象获取父类class对象

四种创建class对象的方法 先创建三个类,Person,Student,Teacher。其中Student和Teacher继承Person类 class Person{ public String name; public Person() { } public Person(String name) { this.name = name; } @Override public String toString() {

木子 旭的博客 2066

Android11.0(R) MTK 平台开机logo动态替换(by logo.bin方式)

实现的效果 客户提供一张格式为 bmp 的开机logo,在 linux 环境下执行制作 logo.bin 脚本文件, apk 拷贝 logo.bin 文件替换系统原有的bin,然后重启 logo 自动更新。 原理分析 MTK 平台的充电图片和开机logo都是打包到 logo.bin 中的 对应的资源路径在源码 vendor\mediatek\proprietary\bootable\bootloader\lk\dev\logo 系统一般预制了很多分辨率文件夹,实际通过 BOOT_LOGO 来确定打包那一个

cczhengv 4589

计算机网络实验报告实验七可靠传输TCP协议分析

计算机网络实验报告实验七可靠传输TCP协议分析

m0_56638814的博客 966

Java-没有返回值的类型的方法定义以及调用

没有返回值的类型的方法定义以及调用

weixin_57197238的博客 2255

链路状态路由协议 OSPF (一)

本章将会学习链路状态路由协议OSPF,理解OSPF的基本概念,工作原理,掌握OSPF配置基本命令。本章重点,OSPF的基本概念,OSPF配置。

yj11290301的博客 3475

Java进阶学习——5,注解原理与自定义注解处理器

学习目标:深入理解注解原理与自定义注解处理器文章目录一、注解的基本概念1. 注解的定义二、注解的详细原理1. 注解的本质2. 注解的保留策略3. 注解的目标类型三、自定义注解处理器1. 编译时注解处理器创建自定义注解实现注解处理器2. 运行时注解处理器创建运行时注解实现运行时处理器四、完整示例1. 定义实体类2. 使用示例五、注解处理器的应用场景1. 代码生成2. 依赖注入3. 配置管理4. 验证框架六、最佳实践1. 注解设计原则2. 处理器性能考虑总结注解(Annotation)

2402_83462390的博客 901

基于simulink的软开关技术的三相逆变器仿真

三相逆变器中的软开关技术(Soft Switching Techniques)旨在减少开关损耗,提高效率,并降低电磁干扰(EMI)。实现软开关通常涉及使用谐振电路或准谐振电路来确保开关器件在零电压(Zero Voltage Switching, ZVS)或零电流(Zero Current Switching, ZCS)条件下进行切换。下面将详细介绍如何在Simulink中进行基于软开关技术的三相逆变器仿真设计。

xiaoheshang_123的博客 168

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java进阶之Annotation(注解)——自定义注解

要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法。 元注解:  元注解的作用是负责注解其他注解。 Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解: 1.@Target, 2.@Retention, 3.@Doc

小小本科生成长之路 1071

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

java进阶学习十二之自定义注解与Properties类

1: 注解 ​ 1.1 定义 : Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。 Java 语言中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 。 当然它也支持自定义 Java...

qq_41905827的博客 497

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JAVA进阶篇之 自定义注解的定义与使用

Java注解  Annotation(注解)是JDK5.0及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。注解是以‘@注解名’在代码中存在的,根据注解参数的个数,我们可以将注解分为:标记注解、单值注解、完整注解三类。它们都不会直接影响到程序的语义,只是作为注解(标识)存在,我们可以通过反射机制编程实现对这些元数据(用来描述数据的数据)的访问。另外,你可以在编译时选...

流沙 206

Java进阶知识5:自定义注解完成某个目的

一、举个栗子 我要写一个测试框架,测试程序员的代码有无明显的异常。 —— 程序员 A : 我写了一个类,它的名字叫做 NoBug,因为它所有的方法都没有错误。 —— 我:自信是好事,不过为了防止意外,让我测试一下如何? —— 程序员 A: 怎么测试? —— 我:把你写的代码的方法都加上 @Jiecha 这个注解就好了。 —— 程序员 A: 好的。 待测试的Nobug类: pa...

何哥的博客 582

Java注解与反射进阶:自定义注解开发及框架底层应用

注解的本质是一种特殊的接口,它继承自 java.lang.annotation.Annotation ,而元注解是定义注解的“注解”,其中 @Target 指定注解作用位置(类、方法、字段等), @Retention 决定注解的生命周期(源码期、编译期、运行期),这两个元注解是自定义注解的基础。反射结合注解的经典应用是Spring的IOC容器,Spring通过扫描带有 @Component 注解的类,利用反射的 Class.newInstance() 创建对象,并将其纳入容器管理。

yt66700的博客 334

Java 进阶 _ 注解及其在 Android 中的应用,android自定义view面试

Javapoet 是一个用来生成.java文件的 Java API,由 Square 开发,你可以在它的 Github 主页中了解它的基本使用方法。它的好处就是对方法、类文件和代码等的拼接进行了封装,有了它,我们就不用再按照字符串的方式去拼接出一段代码了。相比于直接使用字符串的方式,它还可以生成代码的同时直接import对应的引用,可以说是非常方便、快捷的一个库了。这里的是用来生成类文件的核心类,它是一个抽象类,一般使用的时候我们只要覆写它的方法中的4个就可以了。init。

2401_84149423的博客 1160

基于java 自定义注解Annotation设计简单ORM框架——进阶篇

控制台打印如下结果表示利用注解反射生成SQL语句成功。有时间的朋友可以自己实现增删改查的功能,无非就是把生成过程提出来然后传一些需要修改和指定的值进行操作。

liqinglonguo的博客 452

Java进阶学习第二十节——自定义注解与反射解析注解

教学内容 sping boot底层技术介绍 为什么要使用注解 JDK中见的注解 注解作用域 自定义注解三步曲 自定义注解并使用注解 反射解析注解 反射解析注解综合案例 只有一个成员的注解 注解允许子类继承 生成API文档时包含注解 怎样生成Java API文档 spring boot使用到的底层技术主要有: 1.反射 在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一...

WC名字好难取的博客 910

蓝桥杯完美的代价java_【进阶之路】自定义注解介绍与实战

在使用spring框架的时候,我们经常会感叹注解式编程真是大大简化了开发的时间,几个小小的注解,就能解决一系列的配置问题,让写代码像写诗一样轻松明快。我们都知道,在spring框架的前期,大多使用XML配置进行开发。XML配置起来有时候冗长,如实体类的映射,使用XML进行开发会显得十分复杂。同时注解在处理一些不变的元数据时有时候比XML方便的多,比如spring 声明式事务管理,如果用XML写的代...

weixin_33225622的博客 194
上一篇: 深入理解java枚举,让代码更简洁、易懂,提升工作效率!
下一篇: 怎么理解java的多态?
java03_15
博客等级 码龄9年 263粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值