一篇搞定Java注解

参考:https://blog.csdn.net/yeahPeng11/article/details/120394276

https://blog.csdn.net/yeahPeng11/article/details/120330630
https://www.cnblogs.com/CF1314/p/16580232.html

通过现有注解,明白注解是什么东东。

在 SpringBoot中,我们会用到返回值@ResponseBody注解。@ResponseBody返回的是字符串类型数据。

@Target(ElementType.METHOD)         //作用于方法上
@Retention(RetentionPolicy.RUNTIME) //作用在运行时
@Documented                         //生成到文档里
public @interface ResponseBody {String value();
}

元注解

用于定义注解的注解,包括@Target、@Retention、@Documented、@Inherited。

@Target(目标)

Target意为 目标,指定定义的注解起作用的场景。限定注解的使用场景、使用对象等,注解的使用变得十分明确。它的取值由ElementType类提供。

ElementType.TYPE :作用于类、接口(包括注解类型接口)或者枚举类型。ElementType.FIELD:作用于字段属性。ElementType.METHOD:作用于方法。ElementType.PARAMETER:作用于参数。ElementType.CONSTRUCTOR:作用于构造器。ElementType.LOCAL_VARIABLE:作用于局部变量。ElementType.ANNOTATION_TYPE:作用于注解。ElementType.PACKAGE:作用于包。ElementType.TYPE_PARAMETER:作用于类型参数(since jdk1.8)。ElementType.TYPE_USE:作用于使用的类型(since jdk1.8)。ElementType.MODULE:作用于模块声明(since jdk9)。在@ResponseBody中,ElementType.METHOD 代表作用在方法上。

@Retention(保留)

Retention意为 保留,解释这个注解的保留的时间(存活的时间)。它的取值由RetentionPolicy类提供。

​ RetentionPolicy.SOURCE:注解只在源码阶段保留,将被编译器丢弃。

​ RetentionPolicy.CLASS:默认行为,注解只被保留到编译进行的时候,不会被加载到 JVM 中。

​ RetentionPolicy.RUNTIME:注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,程序运行时可读取,可被反射读取到。

Java代码保留(存活)的时间段分为 source -> class -> runtime 三个。

@ResponseBody 注解中,@Retention(RetentionPolicy.RUNTIME) 代表作用在运行时。

@Documented(文档)

Documented意为 文档,解释此注解可以生成在 Javadoc 中。

**@**Inherited(继承)

该注解使父类的注解能被其子类继承

@Repeatable(可重复)

Repeatable意为 可重复,jdk1.8新特性。它表示修饰的注解可以重复被使用。

例如,在Controller类中,我们无法对一个类或方法增加多个 @RequestMapping 注解,会报错 does not have a valid java.lang.annotation.Repeatable annotation,但也有注解,比如 @MapperScan 和 @CompentScan 都可以在一个类和方法上重复使用,原因就是该注解用 @Repeatable 注解

注解:

@Retension(RetensionPolicy.RUNTIME)
@Target({ElementTyoe.Type})
@Documented
@Import({MapperScannerRegister.class})   // 声明是一个配置类
@Repetable(MapperScans.class)
public @interface MapperScanP{}

Java预设的注解

  • @Deprecated:Deprecated意为 弃用、过时,Java语言在不断的迭代中,针对同一需求不断的优化解决方案,旧的解决方案就会使用@Deprecated标记过时,但是还是可以正常使用。
  • @Override:重写父类方法需要使用@Override。
  • @SuppressWarnings:阻止警告。
  • @SafeVarargs:参数安全类型注解。
  • @FunctionalInterface:函数式接口注解,这个是 Java 1.8 版本引入的新特性

Java内建注解

Java提供了三种内建注解。

  1. @Override——当我们想要复写父类中的方法时,我们需要使用该注解去告知编译器我们想要复写这个方法。这样一来当父类中的方法移除或者发生更改时编译器将提示错误信息。

  2. @Deprecated——当我们希望编译器知道某一方法不建议使用时,我们应该使用这个注解。Java在javadoc 中推荐使用该注解,我们应该提供为什么该方法不推荐使用以及替代的方法。

  3. @SuppressWarnings——这个仅仅是告诉编译器忽略特定的警告信息,例如在泛型中使用原生数据类型。它的保留策略是SOURCE(译者注:在源文件中有效)并且被编译器丢弃。

问题:

为什么 @GetMapping 注解请求是 Get请求,为什么@RequestMapping 指定请求类型需要用 RequestMethod.POST。

答疑:

首先通过查看 @GetMapping 的源码

@Target({ElementType.METHOD})
@Retention(RetrntionPolicy.RUNTIME)
@Documented
@RequestMapping(method = {RequestMethod.GET}
)
public @interface GetMapping{}

从源码中可以看到,@GetMapping引用了注解@RequestMapping,同时含有参数RequestMethod.GET。@RequestMapping注解中的RequestMethod枚举,也就表明了请求类型的方式。

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

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

相关文章

G320E是一种低荣声、固定频率的电荷泵型DC/DC转换器

G320E 低噪声电荷泵DC/DC转换器 产品概述: G320E是一种低荣声、固定频率的电荷泵型DC/DC转换器,在输入电压范围在2.7V到5.0V的情况下,该器件可以产生5V的输出电压,最大输出电流达到300mA.G320E外部元件少,非常适合于…

IP定位揭秘:如何揪出SEM、百度竞价恶意点击

在当今的数字营销领域,搜索引擎营销(SEM)和百度竞价成为了企业推广的重要手段。然而,随着这些渠道的普及,恶意点击现象也日益严重。恶意点击主要来自竞争对手,或是竞价服务的提供商,他们通过点击…

亚信安慧AntDB MTK数据同步工具之数据稽核

数据稽核是一种用于确保表数据准确性和一致性的重要方法,它涉及到检查数据的完整性、一致性、有效性和合法性,以及与预期规范的匹配程度等多个方面。随着大数据时代的到来,通过有效的数据稽核,组织可以提高决策的准确性和效率&…

浅谈安科瑞直流电表在荷兰光伏充电桩系统中的应用

摘要:本文介绍了安科瑞直流电表在荷兰光伏充电桩系统中的应用。主要用于充电桩的电流电压电能的计量。 Abstract: This article introduces the application of Acrel DC meters in PV charging pile system in Netherlands.The device is measuring current,volt…

Modbus-RTU协议讲解与实战

1、背景 工作需要,需要使用Modbus-RTU实现RS485通信,于是简单学习并实践了一下。 2、参考资料 一文看懂Modbus协议 3、协议说明 3.1、协议类型 当前设备采用Modbus-RTU协议,采用CRC-16_Modbus校验算法,数据链路层使用用标准串口协议,物理层采用RS485进行数据传输。 …

python变量、常量、数据类型

一、变量 变量是存储在内存中的值,这就意味着在创建变量时会在内存中开辟一个空间。 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。 因此,变量可以指定不同的数据类型,这些变量可以…

开源Flutter on Desktop项目-极扩安卓开发者工具

极扩-安卓开发者工具 他能干嘛 这个Flutter on Desktop桌面项目可以辅助你开发APP,支持分析一些运行数据以及操作APK安装等功能,甚至我还加入了Window安卓子系统的功能。 在它的帮助下,你可以快速查看当前正在运行的Activity,给你…

ubuntu/windows/mac小问题记录

ubuntu删除snap,释放dev/mapper/ubuntu–vg-ubuntu–lv使用率100%问题。 当无法用常规方式卸载snapd。粗暴: 删除 Snap 的目录 rm -rf ~/snap sudo rm -rf /snap sudo rm -rf /var/snap sudo rm -rf /var/lib/snapd sudo rm -rf /var/cache/snapd删除 S…

Oracle时间排序字段

要用 TIMESTAMP(6) 不要用 date 因为 date只到秒 ,排序不准确

开发外卖霸王餐返利小程序的步骤有哪些?

外卖霸王餐返利小程序是一种基于社交电商模式的小程序,主要实现用户和商家的共赢。 开发外卖霸王餐返利小程序的方案可以包括以下几个步骤: 1、需求分析 明确外卖霸王餐返利小程序的功能和特点。确定用户可以参与的活动类型、返利规则、用户界面设计等…

Jmeter 分布式压测

为什么要分布式 jmeter是100%纯java开发的程序,虚拟用户是以线程实现的,在大量并发情况下,很容易出现CPU、内存消耗过大的问题,甚至会出现java内存溢出。一般一台电脑设置500-600线程数即可,如果超过1000线程&#xf…

vue - - - - - vue-qr插件生成二维码

vue-qr插件生成二维码 1. 安装插件2. 组件使用示例图&#xff1a;扫码结果 1. 安装插件 【vue-qr 官网地址】 npm install vue-qr --save // or yarn add vue-qr --save2. 组件使用 <template><vue-qr :logo-src"logoSrc":size"237":margin&qu…

php一句话木马免杀

php一句话木马免杀 针对于php一句话木马做免杀&#xff1a; 利用php动态函数的特性&#xff0c;将危险函数拆分成字符&#xff0c;最终使用字符串拼接的方式&#xff0c;然后重新拼接&#xff0c;后加括号执行代码&#xff0c;并且可以使用花指令进行包装&#xff0c;如无限i…

Pol8891 规格书 ——图像处理芯片/RGB转MIPI支持图像 90°/270°旋转处理

一、芯片简介 1、系统 高性能 MIPS 32bit CPU 内核&#xff1b; 高性能 DSP 内核图像处理单元&#xff1b; 8KB 指令 Cache&#xff1b; 8KB 数据 Cache&#xff1b; 64KB OnChip SRAM&#xff1b; 内嵌 DDR3 控制器&#xff1b; 2、RGB 输入 支持 RGB666、RGB888 输入…

中电金信:《保险业监管研究及数字化转型方向探索白皮书》

纵观近二十年保险业从信息化向数字化的演进过程&#xff0c;我们感受到了数字化转型阶段性成果渐成的喜悦&#xff0c;同时也深深的体会到数字化转型在“痛并快乐着”的历程中的种种艰辛。当今世界正处于百年未有之大变局&#xff0c;随着我国保险市场的供需格局演变和外部环境…

【Unity】EventSystem.current.IsPointerOverGameObject()对碰撞体起作用

本来我是用 EventSystem.current.IsPointerOverGameObject()来检测是否点击在UI上的&#xff0c;但是发现&#xff0c;他对我的碰撞体也是返回ture,研究半天。。。。找不出问题&#xff0c;然后发现我的相机上挂载了PhysicsRaycaster&#xff0c;去掉之后就好了&#xff0c;至于…

Mapbox中点图层和面图层点击事件重叠,禁止点击穿透方案

使用mapbox的小伙伴们可能都遇到过这个问题,就是当地图上有两个图层,一个面图层一个点图层,二者相重合的时候。假设我们想点击点位弹窗展示一些内容,也想点击面图层的时候弹窗展示一些内容,这时候一个有意思的问题就产生了,就是点击点位弹窗的时候面图层对应的弹窗也会弹…

计算二叉树双分支节点的个数(可运行)

如果对您有用&#xff0c;点个赞&#xff0c;关注一下哦&#xff01;毕竟像我这种不用付monyY的博主不多了&#xff0c;且行且珍惜吧&#xff01;俺只想要数据【偷笑】 运行环境.cpp 如果没有输出结果一定是建树错误&#xff01;&#xff01;&#xff01;&#xff01;&#x…

libbz2 for Mac OS makefile

git地址&#xff1a;git://sourceware.org/git/bzip2.git a文件Makefile # ------------------------------------------------------------------ # This file is part of bzip2/libbzip2, a program and library for # lossless, block-sorting data compression. # # bzip…

MySQL-01-MySQL基础架构

1-MySQL逻辑结构 如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图&#xff0c;有助于深入理解MySQL服务器。下图展示了MySQL的逻辑架构图。 MySQL逻辑架构整体分为三层&#xff0c;最上层为客户端层&#xff0c;并非MySQL所独有&#xff0c;诸如&#xff1a;连接处…