Springboot常见注解总结

news2024/12/29 8:53:57

给实体类使用该注解,结合后续的EXCEL工具类进行使用,能加快开发过程中关于文件导入的需求

文章目录

  • 目录

    前言

    1. @Excel注解

    2. @Annotation注解

    3. @Retention注解

    4. @Target注解

    4. @Document注解

    5.@Inherited注解

    5.@RestController注解

    6.@swagger注解(@API等相关的)

    7.@Requestapping和@GetMapping和@PostMapping

    8. Inherited修饰注解

    9.RefreshScope注解

    10.Value注解

    11.@Autowired注解

    12.发现很多注解都有这个require属性

    13.valueof的优雅使用:

    总结


前言

学习项目代码时遇到了很多没有见过的注解,在这里记录学习一下

1. @Excel注解

  1. @Excel注解:该注解直接放在实体类属性中(注意需要生成get/set)方法,自动生成Excel导出数据时,将会自动生成设置表头中文名,同时它属于一个字典注解,主要作用是可以让一些数值型属性能自动转换字典值(注意需生成get/set)dictkey为字典key和实体类保持一致即可,dictExp则为转换值.

2. @Annotation注解

  1. @Annotation是java5开始引入的新特性.中文名称一般叫做注解,它提供了一种安全的类似注释的机制,用来将审核的信息或者元数据与程序元素进行关联,更通俗的意思是为程序的元素加上更加直观更加明了的说明,这些说明信息是与程序的业务逻辑无关,并且是供制定的工具或框架使用的.  Annontation就像一种修饰符一样,应用于包,类型.构造方法,方法,成员变量,参数及本地变量的声明语句中.   

    1. 注意:annotation是不会影响程序代码的执行的,无论annotation怎么变化,代码都始终如一的执行.  

    2. annotation和接口的异同

      1. Annotation类型使用关键字@interface而不是interface这个关键字声明隐含了一个信息,它是继承了java.lang.annotation.Annotation接口,并非声明了一个interface

      2. Annotation类型,方法定义是独特的,受限制的.

      3. Annotation类型和接口的相似之处

  2. Annotation的作用:给某个类,方法...添加了一个注解,这个环节仅仅是做了一个标记,但是对代码本身不会造成任何影响,需要后续环节配合,需要其他方法对该注解赋予业务逻辑.就如同我们在微信上发了一个共享定位,此时并没有什么用,只有当后面其他人都进入了这个共享定位,大家之间的距离才能明确,才知道怎么样聚在一起

  3. 应用场合:annotation一般作为一种辅助途径,应用在软件框架或工具

3. @Retention注解

  1. 作用:定义被它所注解的注解保留多久,一共有三种策略,定义的在RetentionPolicy枚举中
  2. 从注释了解Retention的三个声明周期分别对应于(java源文件.java文件)--->.class文件--->内存中的字节码
    1. source:注解只保留在源文件,当java文件编译侧还能class文件的时候,注解被遗弃;被编译器忽略
    2. class:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的声明周期
    3. runtime:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在
  3. 选择合适的生命周期:首先要明确声明周期的长度SOURCE<CLASS<RUNTIME,所以前者能作用的地方后者一定也能作用.一般如果需要运行时去动态获取注解信息,那么只能用RUNTIME注解,如果要在编译时进行一些预处理操作,比如生成一些辅助代码(如ButterKnife),那么就用CLASS注解;如果只是做一些检查性的操作,比如@Override和@SuppressWarnings,则可以选用SOURCE注解
  4. 因为注解涉及到反射,所以运行时的效率多少会受到影响,所以现在很多的开源项目使用的是编译时注解.

4. @Target注解

  1. 和Retention类似,都是限定注解的范围,一个限定时期范围,而这个限制作用范围
  2. @Target用来表示注解作用范围,超过这个作用范围,编译的时候就会报错
  3. @Target:注解的作用目标
    1. @Target(ElementType.Type)--接口,类,枚举,注解
    2. @Target(ElementType.FIELD)--字段,枚举的常量
    3. @Target(ElementType.METHOD)--方法
    4. @Target(ElementType.PARAMETER)--方法参数
    5. @Target(ElementType.CONSTRUCTOR)--构造函数
    6. @Target(ElementType.LOCAL_VARIABLE)--局部变量
    7. @Target(ElementType.ANNOTATION_TYPE)--注解
    8. @Target(ElementType.ANNOTATION_TYPE)--注解
    9. @Target(ElementType.PACKAGE)--包

4. @Document注解

  1. 说明该注解将被包含在javadoc中

5.@Inherited注解

  1. 说明子类可以继承父类中的该注解

5.@RestController注解

  1. 在Spring中@RestController的作用等同于@Controller + @ ResponseBody,所以想要理解@RsetController注解就要先了解@Controller和@ResponseBody注解.
  2. @Controller注解:在一个类上添加@Controller注解,表面了这个类是一个控制器类.代表这个类会被Spring接管,Spring可以使用扫描机制来找到应用程序中所有基于注解的控制器类,为了保证Spring能找到你idea控制器,需要在配置文件中声明组件扫描.但想要让这个类成为一个处理请求的处理器光有@Controller注解是不够的,它还需要进一步修炼才能成为一个处理器,
    1. 在spring容器中创建该类的实例,创建实例的方式有两种:
    2. <bean class="test.controller.MyController" />   这种方式是在spring容器中注入单个bean,当项目比较大,控制器类比较多时,用这种方式想Spring容器中注入bean是非常的让人苦恼的一件事儿,索性有第二种方式.
    3. <context: component-scan base-scan= "test.controller" /> 这种方式会扫描制定包中的所有类,并生成相应的bean注入到spring容器中.使用这种方式当然能够极大提高我们的开发效率,但是有时候我们不想某一类型的类注入到spring容器中.这个时候第二种方式也可以解决.
    4. @ResquestMapping注解是用来映射请求的,即指明处理器可以处理哪些URL请求,该注解既可以用在类上,也可以用在方法上.当使用@RequestMapping标记控制类时,方法的请求地址是相对类的请求而言的;当没有使用@RequestMapping标记类时,方法的请求地址是绝对路径. @RequestMapping的地址可以是URL变量,并且通过@PathVariable注解获取作为方法的参数.也可以是通配符来筛选请求地址.
    5. @ResponseBody注解:@ResponseBody表示方法的返回值直接以指定的格式写入Http response body中,而不是解析为跳转路径,格式的转换是通过HttpMessageConverter中的方法实现的,因为它是一个接口,因此由其实现类完成转换.如果要求方法返回的是json格式数据,而不是跳转页面,可以直接在类上标注@RestContorller,而不用在每个方法中标注@ResponseBody,简化了开发过程

6.@swagger注解(@API等相关的)

  1. @Api(atgs="xxx模块说明")       作用在模块类上
  2. @ApiOperation("xxx接口说明")       作用在接口方法上
  3. @ApiModel("xxxPOJO说明")       作用在模型类上:如VO,BO
  4. @ApiModelProperty(value="xxx属性说明","hidden"=true)      作用在类方法和属性上,hidden设置为true可以隐藏该属性
  5. @ApiParam("xxx模块说明")       作用在参数,方法和字段上,类似@ApiModelProperty

7.@Requestapping和@GetMapping和@PostMapping

  1. @GetMapping就是@RequestMapping附加了get请求方法.也就是说@GetMapping就是一个只能用来处理http的get请求的注解,比较专一,只能干这一件事儿,而@RequestMapping可以处理多种http的请求,总的来说:@PostMapping@GetMapping,@PutMapping,@DeleteMapping等注释都可以用@RequestMapping代替,如果害怕在映射的时候出错,可以统一使用@ResquestMapping,当然这样写有弊端,全用的话不方便其他人对于代码的阅读,所以能分开尽量分开吧,养成良好的代码书写习惯

8. Inherited修饰注解

  1. 表明使用了@Inherited注解的注解,所标记的类的子类也会拥有这个注解

9.RefreshScope注解

  1. 它是spring cloud中的一个注解,用来实现Bean中属性的动态刷新
  2. @Scope是spring cloud提供的一种特殊的scope实现,用来实现配置和实例热加载.

10.Value注解

  1. 它的作用是通过注解将常量,配置文件中的值,其他bean的属性值注入到变量中,作为变量的初始值.
  2. 有两种使用方法
    1. @Value("${}") :可以获取对应属性文件中定义的属性值
    2. @Value("#{}") :表示SpEl表达式通常用来获取bean属性,或者调用bean的某个方法

11.@Autowired注解

  1. @Autowired表示某个属性是否需要进行依赖注入,一般是写在属性上,也可以写在方法上.
  2. 在Spring容器初始化的过程中,到了属性填充这一步,会给加了@Autowired的注解属性,自动赋值该注解是先根据类型去Spring容器中找出该类型所有的bean对象,如果找出多个则再根据属性的名字从多个中再确定一个,如果require属性为true,并且根据属性信息找不到对象,则直接抛异常

12.发现很多注解都有这个require属性

  1. 当它为true时,被标记的注解参数如果为null,那么就会抛出异常,也就是确保这个被注解的参数一定不为空
  2. 如果为false,则使用默认值.

13.valueof的优雅使用:

  1. valueof有点类似于工厂模式,它是一个静态方法,可以把对象转换为所需要的类型,例如integer.valueof("1005")   new integer("1005").valueof可以转换字符,double,short,等等类型,同事Double Long等对象也有相应的valueof方法.
  2. Integer.valueof是用在Integer类上的,不应该用在integer对象上.这样就可以直接获取对象而不用再new了.可以减少对象的使用,毕竟我们很多时候只是临时用一下对象,然后立马就放弃了,直接new一个对象作为参数看上去比较累赘,而使用一个对象又没有什么意思.
  3. 而且使用valueof可以有效的预防空指针异常,tostring为空可能会导致空指针异常,因为它要求对象一定存在.

 


总结

提示:这里对文章进行总结:
例如:以上就是进行项目学习的内容,但是有些学习的博客我可能忘记写转载后续也找不到了,如果有雷同,欢迎提醒我,我后续补上

以下是学习转载的内容:

ExceExcel注解_@excel注解_AntiLiang的博客-CSDN博客Exce

Annotation理解及运用(详解) - 简书

@Retention注解作用_愿好的博客-CSDN博客

https://www.cnblogs.com/javaxubo/p/16862804.html

valueOf用法_霁月稳的博客-CSDN博客

@ApiModelProperty用法_WGH100817的博客-CSDN博客

注解02:@Api 注解说明_天黑请赶路的博客-CSDN博客

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

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

相关文章

《10.21作业修正》

【一】 cookie概念解析&#xff1a;cookie是一种保存在客户端的小型文本文件&#xff0c;用于保存服务器通过set-cookie字段返回的数据&#xff0c;在下次请求服务器道德时候通过cookie字段将内容返回发送给服务器&#xff0c;是http进行客户端维护的一中方式&#xff0c;并且c…

Mycat中间件综合部署高可用-读写分离-分库分表(1.6)

Mycat中间件综合部署&#xff08;1.6&#xff09; 实施拓扑 一&#xff0c;环境搭建 1.服务分配 主机服务192.168.2.1MySQL-cluster-1192.168.2.2MySQL-cluster-2192.168.2.3Mycat 2.MySQL-cluster1分配 server-id端口角色13306master123307slave133308master243309slave2…

c语言中字符串比较的库函数是什么

说起比较运算&#xff0c;肯定第一时间想到了C语言中关于比较的相关运算符 “>、<、&#xff01;、>、<、”&#xff0c;那么要比较两个字符串是否相等是不是直接用“”比较就行了。下面就来看看这种方法行不行&#xff1f; 先看一个例子 void main( void ) {cha…

chatgpt赋能python:Python中如何使用局部变量

Python中如何使用局部变量 Python是一种高级编程语言&#xff0c;它是一种解释型语言&#xff0c;因此它的速度可能不如C 或Java等编译型语言快&#xff0c;但是Python的语法简洁&#xff0c;易于阅读和编写&#xff0c;并且具有强大的功能。 在Python中&#xff0c;变量是一…

SAP VK11税码的理解

背景:销售订单税率获取逻辑 1.工厂&#xff0c;工厂定义维护了国家代码信息 (SO–工厂–国家代码) 2.客户主数据通用数据维护了国家代码 (SO-客户–国家代码) 3.客户主数据销售数据维护了国家代码对应的税分类&#xff08;此国家代码由销售组织对应国家代码维护的国家代码带出来…

DAY08_JavaScript

目录 1 JavaScript简介2 JavaScript引入方式2.1 内联脚本2.2 内部脚本2.3 外部脚本 3 JavaScript基础语法3.1 书写语法3.2 输出语句3.3 变量3.4 数据类型3.5 运算符3.5.1 \和区别3.5.2 类型转换 3.6 流程控制语句3.6.1 if 语句3.6.2 switch 语句3.6.3 for 循环语句3.6.4 while …

c++ ——day1 homework

1.整理思维导图 2.有以下定义&#xff0c;哪些变量可以改变 const和*的位置&#xff0c;const在前&#xff0c;里面的值不能动*p&#xff0c;地址可以动p const在后&#xff0c;地址不能动&#xff0c;值可以动 const char *p&#xff1a;内容不可变&#xff0c;地址可变 co…

PCL点云处理之添加高斯噪点的两种方法(详细注释版)(一百八十一)

PCL点云处理之添加高斯噪点的两种方法(详细注释版)(一百八十一) 一、实验效果二、算法简介三、具体流程四、PCL自带函数实现1.代码2.结果五、Boost函数实现1.代码2.结果总结一、实验效果 通过实验测试,效果如上所示,算法可以正常运行 二、算法简介 高斯噪声是指它的概率…

实习内容总结

目录 项目BMS后台管理系统FantasyPayment通用支付框架 技术文档 实习时间&#xff1a;2022.12 &#xff5e; 2023.06 公司是初创公司&#xff0c;主要专精于AIGC方向&#xff0c;之前主要是To C的业务&#xff0c;做三消类游戏。今年刚刚转向To B业务&#xff0c;我去的时候Go…

Java性能权威指南-总结6

Java性能权威指南-总结6 垃圾收集入门垃圾收集概述GC算法选择GC算法 垃圾收集入门 垃圾收集概述 GC算法 JVM提供了以下四种不同的垃圾收集算法: Serial垃圾收集器 Serial垃圾收集器是四种垃圾收集器中最简单的一种。如果应用运行在Client型虚拟机(Windows平台上的32位JVM或…

【TaskMatrix.AI - Visual ChatGPT】连接超大模型和超多API来完成任务

Github项目地址&#xff1a;https://github.com/microsoft/TaskMatrix 目前大规模预训练模型&#xff08;比如ChatGPT&#xff09;已经能够完成多个任务&#xff0c;例如 提供强大的对话功能&#xff0c;in-context learning能力和代码生成能力生成高层次的解决问题框架 然而…

Vue.js 比较重要知识点总结四

概述 ref toRef toRefs进阶&#xff0c;深入理解vue3 setupVue3为何比Vue2快&#xff1f;怎样理解 Vue 的单向数据流&#xff1f;Vue 中事件绑定原理vue3 mitt 使用 ref toRef toRefs进阶&#xff0c;深入理解 为何需要ref&#xff1f; 返回值类型&#xff0c;会丢失响应式se…

【常用设计模式】待补充

Github仓库地址 概述 23中设计模型分为常见的三大类&#xff1a;创建型模式、结构型模式和行为型模式 创建型模式 简单工厂模式 描述 简单工厂模式不是23中设计模式中的。简单工厂模式不直接向客户端暴露对象创建的细节&#xff0c;而是通过一个工厂类来负责创建产品类的实…

12.MSP432E4 Keil烧录报错Error Flash Download failed - Cortex-M4

一、简介 前段时间琢磨了一块新板子&#xff0c;ESP432E401Y。 遇到一个问题&#xff0c;简单记录一下&#xff0c;问题是在keil中正常烧录程序后&#xff0c;在CCS下也烧录了一次程序&#xff0c;然后就一直无法再到keil中烧录&#xff0c;但是CCS一直是正常烧录的。keil报错…

Spark集群搭建

系列文章目录 Ubuntu常见基本问题 Hadoop3.1.3安装&#xff08;单机、伪分布&#xff09; Hadoop集群搭建 HBase2.2.2安装&#xff08;单机、伪分布&#xff09; Zookeeper集群搭建 HBase集群搭建 Spark安装和编程实践&#xff08;Spark2.4.0&#xff09; Spark集群搭建 文章目…

linux开发:linux最大线程数分析

linux最大线程数分为&#xff0c;进程最大线程数&#xff0c;用户最大进程数&#xff0c; 整个系统已用的线程或进程数。 我们可以用下面命令进行查询这三个进程数。 linux系统可生成最大线程数可以用这个命令查询 cat /proc/sys/kernel/threads-max 进程最大线程数查询方式 ps…

家用儿童帆布床出口欧盟CE认证EN716测试

1.标准适用范围 该标准规定了内部长度大于900mm但不超过1400mm的家用童床的安全要求。该安全要求适用于完全组装完毕待用的童床。可以转换成其它产品的童床&#xff08;如&#xff1a;可变产品、游戏床&#xff09;转换后应该符合相关欧洲标准。该标准不适用于提篮、婴儿床和摇…

hacknet攻略(更新中)

序章 然后点自己的电脑&#xff0c;再点一下SCAN(扫描可用主机)&#xff0c;再点断开 然后点蓝色的电脑&#xff0c;是连接的意思 点中间Probe系统图标&#xff0c;看开放端口数 若端口数为0可以使用porthakc命令直接黑入系统 几个会用到的命令cd, rm * ,dc关闭连接&…

Unity制作二次元卡通渲染角色材质——4 、内外描边和细节添加

Unity制作二次元材质角色 回到目录 大家好&#xff0c;我是阿赵。 这里继续讲二次元角色材质。这次打算讲一下描边和细节的添加。 一、外描边 外描边的做法也不止一种&#xff0c;比如后处理方法的偏导数ddx/ddy之类的&#xff0c;也能整个屏幕的求出边缘。但一般来说单模型渲…

MySQL数据库学习笔记(九)实验课六之触发器和存储过程

没想到这就是最后一次实验了。 一点知识&#xff1a; 道具 – delimiter / DELIMITER 这是用于指定语句分隔符的特殊命令 默认情况下&#xff0c;MySQL使用分号&#xff08;;&#xff09;作为语句的结束符。然而&#xff0c;当我们需要定义存储过程、触发器或函数等包含多条S…