Spring Boot 最最最常用的注解梳理

文章目录

            • 一、注解(annotations)列表
            • 二、注解(annotations)详解
            • 三、JPA注解
            • 四、springMVC相关注解
            • 五、全局异常处理

一、注解(annotations)列表

@SpringBootApplication: 包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan让spring Boot扫描到Configuration类并把它加入到程序上下文。

@Configuration 等同于spring的XML配置文件;使用Java代码可以检查类型安全。

@EnableAutoConfiguration 自动配置。

@ComponentScan 组件扫描,可自动发现和装配一些Bean。

@Component 可配合CommandLineRunner使用,在程序启动后执行一些基础任务。

@RestController 注解是@Controller和@ResponseBody的合集,表示这是个控制器bean,并且是将函数的返回值直 接填入HTTP响应体中,是REST风格的控制器。

@Autowired 自动导入。

@PathVariable 获取参数。

@JsonBackReference 解决嵌套外链问题。

@RepositoryRestResourcepublic 配合spring-boot-starter-data-rest使用。

二、注解(annotations)详解

@SpringBootApplication: 申明让spring boot自动给程序进行必要的配置,这个配置等同于:@Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三个配置。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

@ResponseBody: 表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用,用于构建RESTful的api。在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。

比如异步获取json数据,加上@responsebody后,会直接返回json数据。该注解一般会配合@RequestMapping一起使用。

示例代码:

@RequestMapping(/test”)
@ResponseBody
public String test(){return”ok”;
}

@Controller: 用于定义控制器类,在spring 项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),一般这个注解在类中,通常方法需要配合注解@RequestMapping。

示例代码:

@Controller
@RequestMapping(/demoInfo”)
publicclass DemoController {@Autowiredprivate DemoInfoService demoInfoService;@RequestMapping("/hello")public String hello(Map<String,Object> map){System.out.println("DemoController.hello()");map.put("hello","from TemplateController.helloHtml");//会使用hello.html或者hello.ftl模板进行渲染显示.return"/hello";}
}

@RestController: 用于标注控制层组件(如struts中的action),@ResponseBody和@Controller的合集。

示例代码:

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping(/demoInfo2”)
publicclass DemoController2 {@RequestMapping("/test")public String test(){return"ok";}
}

@RequestMapping: 提供路由信息,负责URL到Controller中的具体函数的映射。

@EnableAutoConfiguration: Spring Boot自动配置(auto-configuration):尝试根据你添加的jar依赖自动配置你的Spring应用。例如,如果你的classpath下存在HSQLDB,并且你没有手动配置任何数据库连接beans,那么我们将自动配置一个内存型(in-memory)数据库”。

你可以将@EnableAutoConfiguration或者@SpringBootApplication注解添加到一个@Configuration类上来选择自动配置。如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解的排除属性来禁用它们。

@ComponentScan: 表示将该类自动发现扫描组件。个人理解相当于,如果扫描到有@Component、@Controller、@Service等这些注解的类,并注册为Bean,可以自动收集所有的Spring组件,包括@Configuration类。

我们经常使用@ComponentScan注解搜索beans,并结合@Autowired注解导入。可以自动收集所有的Spring组件,包括@Configuration类。我们经常使用@ComponentScan注解搜索beans,并结合@Autowired注解导入。

如果没有配置的话,Spring Boot会扫描启动类所在包下以及子包下的使用了@Service,@Repository等注解的类。

@Configuration: 相当于传统的xml配置文件,如果有些第三方库需要用到xml文件,建议仍然通过@Configuration类作为项目的配置主类——可以使用@ImportResource注解加载xml配置文件。

@Import: 用来导入其他配置类。

@ImportResource: 用来加载xml配置文件。

@Autowired: 自动导入依赖的bean

@Service: 一般用于修饰service层的组件

@Repository: 使用@Repository注解可以确保DAO或者repositories提供异常转译,这个注解修饰的DAO或者repositories类会被ComponetScan发现并配置,同时也不需要为它们提供XML配置项。

@Bean: 用@Bean标注方法等价于XML中配置的bean。

@Value: 注入Spring boot application.properties配置的属性的值。

示例代码:

@Value(value = “#{message})
private String message;

@Inject: 等价于默认的@Autowired,只是没有required属性;

@Component: 泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

@Bean: 相当于XML中的,放在方法的上面,而不是类,意思是产生一个bean,并交给spring管理。

@AutoWired: 自动导入依赖的bean。byType方式。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。当加上(required=false)时,就算找不到bean也不报错。

@Qualifier: 当有多个同一类型的Bean时,可以用@Qualifier(“name”)来指定。与@Autowired配合使用。@Qualifier限定描述符除了能根据名字进行注入,但能进行更细粒度的控制如何选择候选者,具体使用方式如下:

@Autowired
@Qualifier(value = “demoInfoService”)
private DemoInfoService demoInfoService;

@Resource(name=”name”,type=”type”): 没有括号内内容的话,默认byName。与@Autowired干类似的事。

三、JPA注解

@Entity: @Table(name=”“): 表明这是一个实体类。一般用于jpa这两个注解一般一块使用,但是如果表名和实体类名相同的话,@Table可以省略

@MappedSuperClass: 用在确定是父类的entity上。父类的属性子类可以继承。

@NoRepositoryBean: 一般用作父类的repository,有这个注解,spring不会去实例化该repository。

@Column: 如果字段名与列名相同,则可以省略。

@Id: 表示该属性为主键。

@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = “repair_seq”): 表示主键生成策略是sequence(可以为Auto、IDENTITY、native等,Auto表示可在多个数据库间切换),指定sequence的名字是repair_seq。

@SequenceGeneretor(name = “repair_seq”, sequenceName = “seq_repair”, allocationSize = 1): name为sequence的名称,以便使用,sequenceName为数据库的sequence名称,两个名称可以一致。

@Transient: 表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性。如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic。@Basic(fetch=FetchType.LAZY):标记可以指定实体属性的加载方式

@JsonIgnore: 作用是json序列化时将Java bean中的一些属性忽略掉,序列化和反序列化都受影响。

@JoinColumn(name=”loginId”): 一对一:本表中指向另一个表的外键。一对多:另一个表指向本表的外键。

@OneToOne、@OneToMany、@ManyToOne: 对应hibernate配置文件中的一对一,一对多,多对一。

四、springMVC相关注解

@RequestMapping: @RequestMapping(“/path”)表示该控制器处理所有“/path”的UR L请求。RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。该注解有六个属性:

params:指定request中必须包含某些参数值是,才让该方法处理。
headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。
value:指定请求的实际地址,指定的地址可以是URI Template 模式
method:指定请求的method类型, GET、POST、PUT、DELETE等
consumes:指定处理请求的提交内容类型(Content-Type),如application/json,text/html;
produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回
@RequestParam: 用在方法的参数前面。

@RequestParam String a =request.getParameter(“a”)。

@PathVariable: 路径变量。如

RequestMapping(“user/get/mac/{macAddress})
public String getByMacAddress(@PathVariable String macAddress){//do something;
}

参数与大括号里的名字一样要相同。

五、全局异常处理

@ControllerAdvice: 包含@Component。可以被扫描到。统一处理异常。

@ExceptionHandler(Exception.class): 用在方法上面表示遇到这个异常就执行以下方法。

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

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

相关文章

在抖音上刷到AI程序员的工资条后,我笑了,别吹了!

2020年&#xff0c;程序员会怎么样&#xff1f;A与B &#xff0c;薪酬与前景程序员与远方2017年~2018年&#xff0c;是人工智能大火的时候。你会发现&#xff0c;跟朋友聊天不谈人工智能&#xff0c;聊天的bigger都上不去。作为一个前景明朗的朝阳行业&#xff0c;高薪吸引&…

工作流Flowable实战篇

文章目录一、基础篇1. 流程Demo案例2. 流程模板导入3. 流程模板部署4. 流程的模板的图片和xml显示5. 流程定义的挂起与激活6. 流程定义的删除7. 流程定义查看流程图和xml8. 流程实例的启动9. 流程实例挂起与激活10. 流程实例的删除11. 流程实例 跟踪流程12. 流程实例 终止流程1…

C++面向对象思想 两条直线交点计算

我相信哪怕一点光&#xff0c;也能驱散学习中的迷雾&#xff0c;我在这分享一点自己的挫见 思路&#xff1a; 这题最大的难点就是abc三个常数要怎么去构造&#xff0c;这里需要数学公式去推导&#xff0c;虽然是初中水平&#xff0c;也能体现编程和数学密不可分了。因为我之后…

K8s 实践 | 如何解决多租户集群的安全隔离问题?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 匡大虎责编 | 阿秃导读&#xff1a;如何解决多租户集群的安全隔离问题是企业上云的一个关键问题&#xff0c;本文主要介绍 Kubernetes 多租户集群的基本概念和常见应用形态&#xff0c;以及在企业内部共享集群的业务场景下&a…

scara机器人dh参数表_两分钟带你了解机器人标定的因素

为什么机器人需要标定&#xff1f;影响机器人本体精度因素分为两大类&#xff1a;运动学因素——加工误差、机械公差/装配误差、减速器精度、减速器空程等&#xff1b;动力学因素——质量、惯性张量、摩擦力、关节柔性、连杆柔性。机器人本体的实际精度和理论设计模型可能会存在…

Git的3大区域

为什么使用git&#xff1f; 为了保存文件的每一个历史记录&#xff0c;以便查看每一个历史节点的文件变动情况和把错误的的历史节点回滚。 git分为3个区域&#xff0c;工作区、暂存区、版本库(本地)。 工作区包括git已经管理的文件区域和新增以及修改的文件区域 暂存区&#x…

多道批程序快速启动各种服务

之前每次开机都需要重新启动各种服务&#xff0c;太麻烦了&#xff0c;那么今天提供一种简单方式来快速的启动各种服务 视频讲解&#xff1a;简单代码让你快速启动各种服务 创建一个文件txt作为启动主程序 # 获取管理员权限 echo off&color 17 if exist "%SystemRoo…

python编辑学生分数_python处理excel(04)数据筛选和过滤

源数据&#xff0c;我们最终要找出年龄在18——30岁之间&#xff0c;分数大于85分的学生&#xff0c;为A类学生。在excel里可以使用筛选功能&#xff0c;先筛选age列&#xff0c;大于等于、小于。这两个条件限制。然后选score后边的小三角&#xff0c;条件为大于等于85.最终数据…

如何打通“鱼塘” ?腾讯启动“SaaS技术联盟” 共建技术中台

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 刘丹出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;“SaaS企业迎来了最好的时代。一方面&#xff0c;产业互联网大潮已至&#xff0c;中国企业降本增效的需求提升&#xff1b;另一方面&#xff0c;云计算…

Git 回滚

文章目录1. 简述2. 命令版本3. idea 图形化版本(场景1)4. idea 图形化版本(场景2)1. 简述 Git 回滚&#xff1a;常见的有2种场景&#xff0c;第一种是回滚到之前版本&#xff0c;第二种是回滚到之后的版本。 2. 命令版本 用到的命令&#xff1a; 场景1(回滚之前的版本)&…

python开两个守护线程_python 守护线程

守护线程 如果python线程是守护线程&#xff0c;那么以为着这个线程是“不重要”的&#xff0c;“不重要”意味着如果他的父进程结束了但该守护线程没有运行完&#xff0c;守护进程就会被强制结束。如果线程是非守护线程&#xff0c;那么父进程只有等到守护线程运行完毕后才能结…

Nutanix企业云助力嘉里大通提升核心竞争力

Nutanix&#xff08;纳斯达克代码&#xff1a;NTNX&#xff09;近日宣布&#xff0c;物流行业领导企业嘉里大通 (Kerry EAS) 已采用Nutanix超融合基础架构&#xff08;HCI&#xff09;和企业云解决方案&#xff0c;进行企业数据中心的现代化改造。 尽管面临全球贸易和区内经济…

SoapUI 测试http接口实战

文章目录1. New SOAP project2. New TestSuite3. New TestCase4. Add HTTP Request5. 配置请求参数信息6. 选择请求报文类型1. New SOAP project 1&#xff09;打开soapui–>右键Projects–>New SOAP project 2. New TestSuite 3. New TestCase 4. Add HTTP Request …

Git开发流程和工作流

开发流程&#xff1a; C2版本基于C1版本开发&#xff1b;C3版本基于C2版本开发&#xff1b; C4版本基于C3版本开发&#xff1b;C5版本基于C3版本开发&#xff1b; C6 是C4和C3合并后的版本 分支3个总览&#xff1a; 主分支、bug分支、新功能分支 Git修改变动分析&#xff1a;…

python计算长方体体积最简单代码_python处理DICOM并计算三维模型体积

python处理DICOM并计算三维模型体积来源&#xff1a;中文源码网 浏览&#xff1a; 次 日期&#xff1a;2019年11月5日【下载文档: python处理DICOM并计算三维模型体积.txt 】(友情提示:右键点上行txt文档名->目标另存为)python处理DICOM并计算三维模型体积在已知DICO…

AI 安全在阿里业务中的实践,你了解吗?

我们知道&#xff0c;AI 技术将在很长一段时间占据互联网技术时代的风口。但是&#xff0c;有代码的地方就有缺陷&#xff0c;提到技术很难不讲安全&#xff0c;那么AI会不会碰到安全问题呢&#xff1f; AI安全 试想一下&#xff0c;未来的某个早晨&#xff0c;当你像往常一样…

vue ref和reactive的区别

ref 函数传入一个值作为参数,返回基于该参数的响应式ref对象 ref 接受参数&#xff0c;并将其包裹在一个带有 value property 的对象中返回&#xff0c;然后可以使用该 property 访问或更改响应式变量的值 将值封装在一个对象中&#xff0c;看似没有必要&#xff0c;但为了保…

解决idea修改html、js、css后,浏览器不能同步加载

重装了IDEA后&#xff0c;忽略了一些设置&#xff0c;导致在开发springboot项目时&#xff0c;启动了项目&#xff0c;修改了前端文件&#xff0c;但是浏览器中并不能实时加载修改的内容。 主要是IDEA的2个地方需要设置&#xff1a; 一、修改file-settings 二、在IDEA中&…

安全多方计算新突破!阿里首次实现“公开可验证” 的安全方案

阿里妹导读&#xff1a;近日&#xff0c;阿里安全双子座实验室与马里兰大学等高校合作的论文《Covert Security with Public Verifiability: Faster, Leaner, and Simpler 》【1】被欧洲密码年会(Eurocrypt)2019接收。这是国内公司在安全多方计算领域的第一篇顶会论文&#xff…

996!007!同是敲了2万行代码,为什么他却晋升了?

正在敲代码的你 &#xff0c;春节假期即将来临&#xff0c;复盘这1年&#xff0c;你印象最深刻的一件事是什么&#xff1f;有人在群里回答了一条扎心的答案&#xff1a;忙碌1年&#xff0c;每天996&#xff0c;回首2019除了加班再无成长可说。你以为只要把事情搞定了&#xff0…