自定义注解(上)自定义注解的定义和检查

什么是注解?

注解是接口的一种变型,定义一组属性,让类、方法或属性用标记的方式调用这些属性。不仅是带有一些属性和值,某些注解带有一些特殊的功能。

如单元测试@Test,可以让方法不依赖主函数单独运行,右键方法体点击运行即可测试,免去了多次频繁创建删除类的操作。如图:

(结果如图,输出“ss”)


如何写自定义注解?

注解本质上是接口,所以定义注解的方式和定义接口很像。

选择新建文件,由于都是java文件,所以选择Java Class。但是注解并不是类。

在命名时选择注解Annotation

 

(其实选什么都不重要,创建出来后都是*.java的文件。即使在创建时选择不同的类型也不能起相同的名字)

(如再创建一个名为MyField的类,结果如下)

该注解的代码如下:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyField {String description();int length() default 20;
}//每个类只能定义一个注解

public @interface MyField是注解的定义方法,在接口前面加个@即可。

因为注解本质上是接口,所以只能定义属性不能定义方法,而且属性的定义也有一些不一样。定义的属性都要有个括号,且赋值时不能直接用等号,而是要用default。

说明:

其中的@Target声明了MyField的作用范围是属性(域)

@Retention声明了注解MyField在运行期间一直有效

这两个常见注解的其他用法:

 

Target:描述了注解修饰的对象范围,取值在java.lang.annotation.ElementType定义,常用的包括:

  • METHOD:用于描述方法
  • PACKAGE:用于描述包
  • PARAMETER:用于描述方法变量
  • TYPE:用于描述类、接口或enum类型
  • ANNOTATION_TYPE        :可用于注解类型上(被@interface修饰的类型)
  • CONSTRUCTOR:可用于构造方法上
  • FIELD:作用在域上
  • LOCAL_VARIABLE:可用于局部变量上

Retention: 表示注解保留时间长短。取值在java.lang.annotation.RetentionPolicy中,取值为:

  • SOURCE:在源文件中有效,编译过程中会被忽略
  • CLASS:随源文件一起编译在class文件中,运行时忽略
  • RUNTIME:在运行时有效

 

作者:快给我饭吃

链接:https://www.jianshu.com/p/a7bedc771204

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

补充:https://blog.csdn.net/u012992462/article/details/80675932


如何检查注解是否已经加载?

定义一个类

import org.junit.Test;
import java.lang.reflect.Field;public class User{//使用我们的自定义注解@MyField(description = "用户名", length = 12)String s = "s";int i = 1;public static void main(String[] args) {//尝试使用@Test来测试所以主函数不写}@Testpublic void show1(){Class C = User.class;for(Field f : C.getDeclaredFields()){//返回类中所定义的属性// 判断这个字段是否有MyField注解System.out.println(f);if(f.isAnnotationPresent(MyField.class)){//MyField.class中定义的注解是否作用在了f上//本例中MyField的作用范围是属性,f就是该类的属性,所以返回trueMyField annotation = f.getAnnotation(MyField.class);//将注解实例化System.out.println("字段:[" + f.getName() + "], 描述:[" + annotation.description() + "], 长度:[" + annotation.length() +"]");}}}}

输出结果:


java.lang.String Strings.s
字段:[s], 描述:[用户名], 长度:[12]
int Strings.i

一个注解只能只能对一个目标起作用。

本例中,由于@Target限定了该注解只对属性有用,所以所用范围就是下一个属性。只有定义String s之前使用了注解,所以在遍历所有属性时,只有访问s时打印了注解属性字段:[s], 描述:[用户名], 长度:[12]。这是isAnnotationPresent方法的作用,判断出只有s被注解了。

同理也可以看到,@Test只对紧随的一个方法有效,下一个方法需要单元测试时也需要一个@Test。


 

注解的使用需要配合Spring Boot。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

自定义注解详解

文章引用 深入理解Java:注解(Annotation)自定义注解入门 自定义注解详细介绍 说在最前 文章忽略特性的一些基本概念 注解的本质是反射 1. 自定义注解 注解其实就是一种标记,可以在程序代码中的关键节点(类、方法、…

查看 HTTP 请求的数据.

文章结构 如果是 GET 请求如果是 POST 请求方法1:DEBUG 窗口(**爽、超级爽、吴迪爽**):方法2:写方法读取流中数据(繁琐,难用): 我们可能会碰到 MVC 拿不到前端的参数&…

基于Html5的在线资料库的设计与实现(asp.NET,SQLServer)

在线资料库系统采用.NET开发平台进行开发,开发工具采用Microsoft Visual Studio 2010集成开发环境,后台编程语言采用C#编程语言来进行编程开发,数据库我们采用当下流行的SQL Server 2008数据库管理系统来存放平台中的数据信息,整个…

【软硬件测试】测试经验:软硬件结合测试要点

目录 一、应用行业 二、测试要点 三、硬件测试 (1)测试含义 (2)测试方法 (3)相关链接 四、结合测试 (1)测试含义 (2)测试工具 (3&am…

【ros/ros2】LCN及ros2节点的LCN改写

文章目录 序言1. ros2两种节点类型2. LCN是什么3. LCN状态转换4. LCN状态转换要做的事5. LCN节点功能划分6. ros2节点的LCN改写 序言 背景:ros2节点改写为lifecycle node节点 1. ros2两种节点类型 Node:和ros1中一样的节点基类LifecycleNode&#xff…

桶排序 — 计数排序和基数排序

计数排序 int类型数组,其中存的是员工的年龄。比如说16 - 150。对于这样的数据来讲,数据状况是受限的。此时如果将数组从小到大进行排序,该如果实现? 这个实现很简单,实现一个统计数组范围从 0 ~ 150,遍历原…

816墨盒计算机无法与,816墨盒怎么加墨 816墨盒加墨方法及注意问题【详解】

导语:随着时代的快速发展,人们生活水平的不断提高,打印机在我们日常生活中的应用也变得非常广泛,利用打印机打印文件,还有一些重要的材料,方便了人们的生活,给人们的生活提供了很大的便利&#…

打印机 检测到用过的耗材或者赝品耗材

检测到用过的耗材或者赝品耗材 大家好,今天续着给大家分享下惠普的803/805墨盒加墨应该注意的事项,先预习,加墨就没那么多困惑了~ 加墨后打印白线条、溅墨怎么办? ①先用温水浸泡打印头约30秒(注意不要泡到芯片&…

打印机墨盒问题

因为打印机墨盒属于耗材,容易损坏,从而造成打印机没法打印。对于家用打印机来说,一个打印机也就三四百块钱,然后换一个新墨盒就得花掉一百左右,心里感觉贼不爽,墨盒那么小一个,居然要那么贵&…

墨盒 连供漏墨恒压问题

你提出了一个连供压力平衡原理的问题。 连供形状各式各样,但基本原理都是相同的。 以红色为例: 如上图。打印机静止时,墨水室的墨水重力,等于墨水室上方因为空气变稀薄后产生的负压。墨水不会流动。实现了压力的静平衡。 打印机工…

【Java 并发编程】深入理解 AQS - AbstractQueuedSynchronizer

深入理解 AQS - AbstractQueuedSynchronizer 1. AQS1.1 什么是 AQS1.2 AQS 具备的特性 2. AQS 原理解析2.1 AQS 原理概述2.1.1 什么是 CLH 锁2.1.2 AQS 中的队列 2.2 AQS 共享资源的方式:独占式和共享式2.2.1 Exclusive(独占式)2.2.2 Share&a…

JVM学习笔记(中)

1、垃圾回收算法 标记清除法 特点: 速度较快会产生内存碎片 注意:这里的清除并不是真正意义上的清除,即每个字节都清0,而是记录一下被清除的对象的起始和结束的地址,当下一次分配给一个新对象时,新对象…

《Java并发编程实战》课程笔记(四)

互斥锁 原子性问题到底该如何解决呢? “同一时刻只有一个线程执行”这个条件非常重要,我们称之为互斥。如果我们能够保证对共享变量的修改是互斥的,那么,无论是单核 CPU 还是多核 CPU,就都能保证原子性了。 锁模型 …

RK3588平台开发系列讲解(驱动基础篇)设备树常用 of 函数

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、查找节点的 of 函数二、获取属性值的 of 函数三、实验示例3.1、查找的节点代码3.2、获取属性内容代码沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 设备树描述了设备的详细信息,这些信息包括数字类型的…

chatgpt赋能python:Python中-1的用法介绍

Python中-1的用法介绍 什么是-1? 在Python中,-1是一个特殊的索引值,它表示从序列的末尾开始向前数1个元素。这在对于列表、字符串、元组等序列类型进行操作时非常有用。 如何使用-1? 假设我们有一个列表: l [1, …

SpringBoot框架理解

1 SpringBoot入门 1.2 什么是SpringBoot 1 官网的解释 ​ Spring在官方首页是这么说的:说使用SpringBoot可以构造任何东西,SpringBoot是构造所有基于Spring的应用程序的起点,SpringBoot在于通过最少的配置为你启动程序。 2 我的理解 SpringBoot是Sp…

Flask-RESTful的使用

Flask-RESTful的使用 Flask-RESTful基本使用安装定义资源Resources创建API实例添加资源到API运行Flask应用 请求处理请求解析参数校验 响应处理数据序列化定制返回格式 其他功能蓝图装饰器集合路由命名规范路由名称 Flask-RESTful Flask-RESTful是一个用于构建RESTful API的扩展…

计算机对社会的应用是什么,电子计算对人类社会有什么贡献?应用的领域又有哪些?...

在人类历史上,蒸汽机的发明和电力的使用,曾经在生产技术上引起过划时代的工业革命,然而,这种革命,从本质上来讲,它仅仅是涉及到代替人的体力劳动,但电子计算机的发明,已经涉及到代替…

一位美女博士的人脸识别历程

2019-01-28 16:44:37 1月21日,科技评论期刊《麻省理工科技评论》发布了2018年“35岁以下科技创新35人”(35 Innovators Under 35)中国榜单。商汤科技研究总监、年仅29岁的石建萍博士荣登此榜,凭借在计算机视觉原创技术的卓越创新…

Android仿微信发图片的样式,做IM的同学的病有救了

一:前言 最近在搞IM,真的特别痛苦。脑袋大,对于我这种菜鸟来说太难了,比现在社会娶个媳妇还难,硬着头皮搞,终于文字,语音,表情搞完了,开始搞图片,看着微信发…