【JAVA】Java常用注解汇总

一、注解的定义

Java注解是Java编程语言中的一种特殊形式的元数据,它们可以用于为程序的各个元素(例如类、方法、字段等)添加额外的信息和属性。注解是在Java 5中引入的,通过在代码中使用注解,开发人员可以提供关于程序结构和行为的补充信息,这些信息可以被编译器、工具和运行时环境所利用。

注解本身是以@符号开头,紧跟着注解的名称,并可以包含一些可选的参数。注解可以应用于类、接口、枚举、方法、字段和其他程序元素上。

Java注解的定义方式如下:

public @interface MyAnnotation {
// 注解元素声明
String value(); // 声明一个名为"value"的注解元素
int count() default 0; // 声明一个名为"count"的注解元素,并设置默认值为0
String[] tags(); // 声明一个名为"tags"的注解元素,类型为String数组
}

二、常用注解汇总

@Autowired:用于实现依赖注入,将匹配的依赖对象自动注入到目标对象中。
@RequestMapping:用于将请求映射到处理器方法上,定义URL路径与处理器方法的映射关系。
@PostMapping、@GetMapping、@PutMapping、@DeleteMapping:这些注解是@RequestMapping的特定方法级别的变体,用于指定特定HTTP请求方法的映射关系。
@PathVariable:用于从URL路径中获取请求参数,并将其绑定到处理器方法的参数上。
@RequestBody:用于将请求体中的内容绑定到处理器方法的参数上,常用于接收和处理JSON或XML格式的请求数据。
@ResponseBody:用于将处理器方法的返回值直接作为响应的内容返回,常用于返回JSON或XML格式的响应数据。
@Transactional:用于标记事务的边界,确保在方法执行期间启用事务管理。
@Component、@Service、@Repository:这些注解用于标记类为组件、服务或仓库,配合Spring的组件扫描机制,使其能够被自动发现并创建实例。
@Aspect:用于定义切面,配合AOP(面向切面编程)实现横切关注点的模块化。
@Configuration:用于标记类为配置类,定义Bean的创建和依赖关系的配置。
@Override:用于标记方法覆盖父类的方法,提醒编译器进行检查。
@Deprecated:用于标记已过时的方法、类或字段,提醒开发人员不建议使用该元素。
@SuppressWarnings:用于抑制编译器警告信息,可以在特定的代码块或元素上禁用指定类型的警告。
@FunctionalInterface:用于标记函数式接口,确保接口只有一个抽象方法。
@SafeVarargs:用于抑制使用可变参数方法或构造函数时的警告。
@Nullable、@Nonnull:用于标记参数、字段或返回值的可空性,用于静态代码分析或文档生成。
@Documented:用于指定注解是否包含在Java文档中。
@Inherited:用于指示注解是否可以被子类继承。
@Retention:用于指定注解的保留策略,包括RetentionPolicy.SOURCE、RetentionPolicy.CLASS和RetentionPolicy.RUNTIME。
@Target:用于指定注解的目标元素类型,包括ElementType.TYPE、ElementType.METHOD、ElementType.FIELD等。
@Repeatable:用于指定注解是否可重复应用于同一目标元素。
@Resource:用于实现依赖注入,类似于@Autowired,但更通用且不依赖于具体框架。
@PostConstruct:用于指定在构造函数执行之后,依赖注入完成之后执行的方法。
@PreDestroy:用于指定在对象销毁之前执行的方法。
0.运行时注解之@SpringBootApplication
@SpringBootApplication是Spring Boot框架中的注解,用于标识一个主类(Main Class)是Spring Boot应用程序的入口点。该注解结合了多个常用注解,简化了Spring Boot应用程序的配置。

三、Java自定义注解(@interface)

基本注解和元注解都是 Java 内置注解,如果这两种注解不能满足您的需求,Java 还允许您自定义注解。

Java 使用 @interface 关键字(interface 关键字前加 @ 符号)实现自定义注解。定义注解与定义接口非常像,如下代码可定义一个简单形式的注解类型。

// 定义一个简单的注解类型
public @interface Test {//TODO:
}

上述代码声明了一个 Test 注解。默认情况下,注解可以在程序的任何地方使用,通常用于修饰类、接口、方法和变量等。

定义注解和定义类相似,注解前面的访问修饰符和类一样有两种,分别是公有访问权限(public)和默认访问权限(默认不写)。一个源程序文件中可以声明多个注解,但只能有一个是公有访问权限的注解。且源程序文件命名和公有访问权限的注解名一致。

不包含任何成员变量的注解称为标记注解,例如上面声明的 Test 注解以及基本注解中的 @Override 注解都属于标记注解。根据需要,注解中可以定义成员变量,成员变量以无形参的方法形式来声明,其方法名和返回值定义了该成员变量的名字和类型。代码如下所示:

public @interface MyTag {// 定义带两个成员变量的注解// 注解中的成员变量以方法的形式来定义String name();int age();
}

以上代码中声明了一个 MyTag 注解,定义了两个成员变量,分别是 name 和 age。成员变量也可以有访问权限修饰符,但是只能有公有权限和默认权限。

如果在注解里定义了成员变量,那么使用该注解时就应该为它的成员变量指定值,如下代码所示。

public class Test {// 使用带成员变量的注解时,需要为成员变量赋值@MyTag(name="xx", age=6)public void info() {...}...
}

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

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

相关文章

debian安装Nginx

编译安装Nginx sudo apt-get update 环境准备 编译Nginx需要gcc的环境支持,build-essential内包含gcc套件,所以我们安装build-essential即可: sudo apt-get install build-essential 因为nginx.conf中使用了正则表达式,所以编…

基于PLC的电梯控制系统(论文+源码)

1.系统设计 电梯采用了PLC控制方式,通过对PLC进行逻辑程序设计,电梯不仅在控制水平上得到了质的提升,同时在安全性上也得到了大大提高。控制系统在构造上实现了简洁化,不仅优化了硬件接线方便了线路施工,同时对控制要…

MySQL从入门到入土---MySQL表的约束 (内含实践)---详细版

目录 引入: null 与not null default: comment列描述 : not null 和 default: zerofill : 主键:primary key 复合主键: 自增长:auto_increment 唯一键:unique key 外键&a…

linux安装nginxs报错:openssl not found

系统: linux 版本:centOS7 nginx版本:nginx-1.20.2 linux安装nginx时 执行下面命令时报错: ./configure --with-http_stub_status_module --with-http_ssl_module --prefix/usr/local/nginxchecking for OpenSSL library ... not …

Flutter:打包apk,详细图文介绍

困扰了一天,终于能正常打包apk安装了,记录下打包的流程。建议参考我这篇文章时,同时看下官网的构建说明。 官网构建并发布 Android 应用详情 1、AS创建Flutter项目 2、cmd执行命令 生成一个sunluyi.jks的文件,可以自行把sunluyi替…

shell命令以及运行原理

目录 一、命令解释器 1、什么是命令行解释器 shell和bash联系 2、为什么用命令行解释器 作用 存在意义 二、Linux权限 1、用户分类 2、Linux权限管理 1)权限身份 2)文件类型和访问权限 3)文件访问权限的相关设置方法 a. chmod …

精准识别花生豆:基于EfficientNetB0的深度学习检测与分类项目

精准检测花生豆:基于EfficientNet的深度学习分类项目 在现代农业生产中,作物的质量检测和分类是确保产品质量的重要环节。针对花生豆的检测与分类需求,我们开发了一套基于深度学习的解决方案,利用EfficientNetB0模型实现高效、准…

CSS利用浮动实现文字环绕右下角,展开/收起效果

期望实现 文字最多展示 N 行,超出部分截断,并在右下角显示 “…” “更多”; 点击更多,文字展开全部内容,右下角显示“收起”。效果如下: 思路 尽量使用CSS控制样式,减少JS代码复杂度。 利…

FOC控制原理-HALL传感器测量电角度

0、相关文章 【电机控制算法】基于霍尔位置传感器(HALL)估算连续电角度(基于STM32F407CubeMXHAL)_峰岹hall-CSDN博客 电机控制【FOC】_SimpleFOC_通过 Hall 计算电机角度和速度原理 - 大大通(简体站) (wpgdadatong.com.cn) STM32 FOC SDK2.0中使用hall传…

手机实时提取SIM卡打电话的信令声音-智能拨号器的SIP线路-双卡双待单通方案

手机实时提取SIM卡打电话的信令声音 --智能拨号器的SIP线路-双卡双待单通方案 一、前言 蓝牙电话的技术方案最初是从蓝牙耳机和车机蓝牙的使用领域延伸出来的技术方式。通过蓝牙的HFP协议,把手机通话的声音和通话事件状态提取出来进行复用和处理。但中国大陆现行…

C++--类与对象

1.封装 封装是c面向对象的三大特性之一 将属性和行为作为一个整体 将属性和行为加以权限控制 语法: class 类名{ 访问权限: 属性/行为 }; 访问权限 public 公共权限 类内类外均可以访问 protected 保护权限 类内可以访问,类外不可以访问 pr…

遗传算法与深度学习实战(29)——编码卷积自编码器架构

遗传算法与深度学习实战(29)——编码卷积自编码器架构 0. 前言1. 构建卷积自编码器2. 构建卷积自编码器基因序列3. 解析基因序列构建模型小结系列链接 0. 前言 使用遗传算法 (Genetic Algorithm, GA) 构建自编码器 (AutoEncoder, AE) 优化器时&#xff…

蓝桥杯(Java)(ing)

Java前置知识 输入流: (在Java面向对象编程里面有提过相关知识) // 快读快写 static BufferedReader in new BufferedReader(new InputStreamReader(System.in)); static BufferedWriter out new BufferedWriter(new OutputStreamWriter…

Ajax数据爬取

有时我们用requests 抓取页面得到的结果,可能和在浏览器中看到的不一样:在浏览器中可以看到正常显示的页面数据,而使用requests 得到的结果中并没有这些数据。这是因为 requests 获取的都是原始 HTML 文档,而浏览器中的页面是JavaScript 处理…

tcpdump 网络数据包分析工具

简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的…

手机发烫怎么解决?

在当今这个智能手机不离手的时代,手机发烫成了不少人头疼的问题。手机发烫不仅影响使用手感,长期过热还可能损害手机硬件、缩短电池寿命,甚至引发安全隐患。不过别担心,下面这些方法能帮你有效给手机 “降温”。 一、使用习惯方面…

BUUCTF Pwn ciscn_2019_es_2 WP

1.下载 checksec 用IDA32打开 定位main函数 发现了个假的后门函数: 看看vul函数: 使用read读取 想到栈溢出 但是只有48个 只能覆盖EBP和返回地址 长度不够构造 所以使用栈迁移: 栈迁移需要用到leave ret 使用ROPgadget找地址: …

IEDA 使用auto Dev编码助手配置Deep Seek V3

文章目录 API Key的申请和创建auto Dev的下载auto Dev的安装Deep seek V3的连接配置和注意事项错误解决:You LLM server Key is empty API Key的申请和创建 登陆Deep Seek开放平台,创建API Key 并复制 auto Dev的下载 auto Dev项目地址,发…

vue3学习笔记(6)-生命周期、hooks

1.生命周期 <template><div><div>{{ a }}</div><div click"test"></div></div> </template> <script setup lang"ts" name"hi"> import { ref, onBeforeMount, onMounted, onBeforeUpdat…

#端云一体化开发# #HarmonyOS Next#《说书人》鸿蒙原生基于角色的对话式文本编辑开发方案

1、写在前面 过去的一百年里&#xff0c;在“编程”的这个行业诞生之初&#xff0c;人们采用面向过程的方式进行开发&#xff0c;但是&#xff0c;伴随着程序规模的日益增大&#xff0c;程序的复杂度也随之增加&#xff0c;使用结构化编程方法来管理复杂的程序逻辑变得越来越困…