Java spring boot常用注解

Spring Boot是一个基于Spring框架的开发框架,它简化了Spring应用的配置和部署过程,提供了一系列注解来帮助开发人员快速构建可靠和高效的应用程序。本文将详细介绍Spring Boot中常用的注解及其使用方法。

Spring Boot注解可以分为以下几个方面:应用程序入口注解、控制器注解、请求注解、参数绑定注解、依赖注入注解、组件注解、条件注解、配置注解等。

一、应用程序入口注解

1. @SpringBootApplication

@SpringBootApplication是一个组合注解,用于标记一个主启动类,表示这是一个Spring Boot应用程序的入口点。它包含了以下三个注解的功能:@Configuration、@EnableAutoConfiguration和@ComponentScan。

@Configuration注解表示这个类是一个配置类,它会提供一些初始化配置。

@EnableAutoConfiguration注解表示启用自动配置功能,Spring Boot会根据依赖和配置自动配置应用程序。

@ComponentScan注解表示扫描和加载应用程序中的组件。

2. @Configuration

@Configuration注解用于标记一个类为Spring的配置类。配置类中可以定义Bean对象和配置相关的信息。在配置类中,可以使用@Bean注解来定义一个Bean对象。例如:

@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserServiceImpl();
}
}

在上面的例子中,AppConfig类被标记为配置类,userService()方法被@Bean注解标记为一个Bean对象的创建方法。

二、控制器注解

1. @RestController

@RestController注解用于标记一个类为Restful控制器,使其能够处理HTTP请求并返回JSON或XML等数据格式的响应。与@Controller注解不同的是,@RestController注解会自动将方法的返回值转换为HTTP响应体,并返回给客户端。例如:

@RestController
@RequestMapping(“/api/user”)
public class UserController {
@GetMapping(“/{id}”)
public User getUser(@PathVariable(“id”) int id) {
// 根据id查询用户信息
User user = userService.getUserById(id);
return user;
}
}

在上面的例子中,UserController类被标记为Restful控制器,getUser()方法被@GetMapping注解标记为处理GET请求的方法。方法的返回值User会被自动转换为JSON格式并返回给客户端。

2. @RequestMapping

@RequestMapping注解用于标记一个方法或类的方法,表示它可以处理来自客户端的HTTP请求。可以通过设置value、method、params、headers等属性来指定请求的URL路径、请求方法、参数或头等条件。例如:

@RestController
@RequestMapping(“/api/user”)
public class UserController {
@GetMapping(“/{id}”)
public User getUser(@PathVariable(“id”) int id) {
// 根据id查询用户信息
User user = userService.getUserById(id);
return user;
}
}

在上面的例子中,@RequestMapping(“/api/user”)表示UserController类中的方法处理以/api/user开头的请求。@GetMapping(“/{id}”)表示getUser()方法处理以GET方法和路径中包含{id}的请求。

三、请求注解

1. @PathVariable

@PathVariable注解用于将URL路径中的变量绑定到方法的参数上。例如,@RequestMapping(“/api/user/{id}”),可以使用@PathVariable(“id”) int id来获取URL路径中的id值。例如:

@RestController
@RequestMapping(“/api/user”)
public class UserController {
@GetMapping(“/{id}”)
public User getUser(@PathVariable(“id”) int id) {
// 根据id查询用户信息
User user = userService.getUserById(id);
return user;
}
}

在上面的例子中,@GetMapping(“/{id}”)表示getUser()方法处理以GET方法和路径中包含{id}的请求。@PathVariable(“id”) int id表示将路径中的id值绑定到方法的id参数上。

2. @RequestParam

@RequestParam注解用于将请求参数绑定到方法的参数上。可以设置value、required、defaultValue等属性来指定请求参数的名称、是否必需和默认值。例如:

@RestController
@RequestMapping(“/api/user”)
public class UserController {
@GetMapping
public List getUsers(@RequestParam(value = “name”, required = false) String name) {
// 根据name查询用户列表
List userList = userService.getUsersByName(name);
return userList;
}
}

在上面的例子中,@RequestMapping(“/api/user”)表示UserController类中的方法处理以/api/user开头的请求。@GetMapping表示处理GET方法的请求。@RequestParam(value = “name”, required = false) String name表示将名为name的请求参数绑定到方法的name参数上,并指定name参数为可选参数。

四、参数绑定注解

1. @RequestBody

@RequestBody注解用于将请求体中的数据绑定到方法的参数上。通常用于接收JSON或XML格式的请求数据。例如:

@RestController
@RequestMapping(“/api/user”)
public class UserController {
@PostMapping
public User createUser(@RequestBody User user) {
// 创建用户
userService.createUser(user);
return user;
}
}

在上面的例子中,@PostMapping表示处理POST方法的请求。@RequestBody User user表示将请求体中的JSON数据转换为User对象,并绑定到方法的user参数上。

2. @ResponseBody

@ResponseBody注解用于将方法的返回值转换为HTTP响应体,并返回给客户端。通常用于返回JSON或XML格式的数据。例如:

@RestController
@RequestMapping(“/api/user”)
public class UserController {
@GetMapping
public List getUsers() {
// 查询用户列表
List userList = userService.getUsers();
return userList;
}
}

在上面的例子中,@RequestMapping(“/api/user”)表示UserController类中的方法处理以/api/user开头的请求。@GetMapping表示处理GET方法的请求。方法的返回值List会被自动转换为JSON格式并返回给客户端。

五、依赖注入注解

1. @Autowired

@Autowired注解用于自动装配一个Bean对象。Spring Boot会自动查找并将匹配的Bean对象注入到目标对象中。例如:

@RestController
@RequestMapping(“/api/user”)
public class UserController {
@Autowired
private UserService userService;

// 省略其他方法...

}

在上面的例子中,@Autowired注解将userService属性注入到UserController类中。Spring Boot会自动查找UserService类的实现并注入到属性中。

六、组件注解

1. @Component

@Component注解用于标记一个类为Spring的一个组件。可以用于自动扫描和自动装配。例如:

@Component
public class UserServiceImpl implements UserService {
// 省略实现代码…
}

在上面的例子中,UserServiceImpl类被标记为一个组件。Spring Boot会自动扫描并将其注册为一个Bean对象。

2. @Service

@Service注解用于标记一个类为Spring的一个服务类。通常用于业务逻辑的实现。例如:

@Service
public class UserServiceImpl implements UserService {
// 省略实现代码…
}

在上面的例子中,UserServiceImpl类被标记为一个服务类。Spring Boot会自动扫描并将其注册为一个Bean对象。

3. @Repository

@Repository注解用于标记一个类为Spring的一个仓库类。通常用于数据访问的实现。例如:

@Repository
public class UserRepositoryImpl implements UserRepository {
// 省略实现代码…
}

在上面的例子中,UserRepositoryImpl类被标记为一个仓库类。Spring Boot会自动扫描并将其注册为一个Bean对象。

七、条件注解

1. @Conditional

@Conditional注解用于基于条件来决定是否创建一个Bean对象。可以使用@ConditionalOnProperty、@ConditionalOnClass、@ConditionalOnBean等条件注解来配置条件。例如:

@Configuration
public class AppConfig {
@Bean
@ConditionalOnProperty(name = “useInMemoryStorage”, havingValue = “true”)
public UserRepository userRepository() {
return new InMemoryUserRepository();
}

@Bean
@ConditionalOnProperty(name = "useInMemoryStorage", havingValue = "false")
public UserRepository userRepository() {return new DatabaseUserRepository();
}

}

在上面的例子中,根据条件useInMemoryStorage的值来决定创建哪个UserRepository的实现类。

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

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

相关文章

MM-Camera架构-ProcessCaptureRequest 流程分析

文章目录 processCaptureRequest\_3\_41.1 mDevice1.2 mDevice->ops->process\_capture\_request1.3 hardware to vendor mct\_shimlayer\_process\_event2.1 mct\_shimlayer\_handle\_parm2.2 mct\_shimlayer\_reg\_buffer processCaptureRequest_3_4 sdm660的摄像头走…

图论第2天----第1020题、第130题

# 图论第2天----第1020题、第130题 文章目录 一、第1020题--飞地的数量二、第130题--被围绕的区域 ​ 又继续开始修行,把图论这块补上,估计要个5-6天时间。 一、第1020题–飞地的数量 ​ 跟前面做的思路差不多,其实有另外一种思路。我这里是…

mysql5.7停止维护时间

mysql5.7将于2023年10月停止官网支持和更新;老项目要准备升级,新项目的mysql必须是mysql8.0(2023-10) 官方升级咨询地址 oracle官方升级咨询地址https://go.oracle.com/LP116153?elq_mid247718&sh1518132002061316121320310…

数据结构—栈、队列、链表

一、栈 Stack(存取O(1)) 先进后出,进去123,出来321。 基于数组:最后一位为栈尾,用于取操作。 基于链表:第一位为栈尾,用于取操作。 1.1、数组栈 /*** 基于数组实现的顺序栈&#…

波浪input输入框文字边框动画

一个input输入框的小动画,大家可以按需引入和修改 input的动画表现为,文字提示波浪动画 效果图如下 源码如下 tips: 有不懂的可以在评论区问博主 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name&q…

javascript中依次输出元素并不断循环实现echarts柱图动画效果

循环来遍历数组并输出其中的元素 在JavaScript中&#xff0c;你可以使用循环来遍历数组并输出其中的元素。如果你想要依次输出6个元素并不断循环&#xff0c;可以使用如下的代码&#xff1a; let arr [/* 你的数组 */];for (let i 0; i < arr.length; i) {console.log(a…

机器学习笔记(一)

1.线性回归模型 2. 损失函数 3.梯度下降算法 多元特征的线性回归 当有多个影响因素的时候,公式可以改写为: 当有多个影响因素的时候为了方便计算,可以使用 Numpy下面的点积方法, np.dot(w,x) 最后再加个b 就省略了很多书写步骤,这叫做矢量化 多元回归的梯度下降 左边是一…

[Android] Input事件分发流程之IMS初始化(1)

IMS初始化 一、简介 当用户触摸屏幕或者按键操作&#xff0c;首次触发的是硬件驱动&#xff0c;驱动收到事件后&#xff0c;将该相应事件写入到输入设备节点&#xff0c; 这便产生了最原生态的内核事件。接着&#xff0c;输入系统取出原生态的事件&#xff0c;经过层层封装后…

acwing算法基础之基础算法--高精度除法算法

目录 1 知识点2 模板 1 知识点 大数除以小数&#xff0c;返回商和余数。 2 模板 //A是大数&#xff0c;低位在前 //b是小数 //C是商&#xff0c;低位在前 //r是余数 vector<int> div(vector<int> &A, int b, int &r) {vector<int> C;for (int i …

CSS文本超出显示小数点

目录 1、单行文本溢出 2、多行文本溢出 1、基于高度截断 2、基于行数截断 1、单行文本溢出 如果解决文本溢出显示省略号&#xff0c;需要满足的三个条件&#xff1a; 先强制一行内显示文本 white-space:nowrap;/*默认normal 自动换行*/ 超出的文本隐藏起来。 overflow:…

clickonce 发布的winform 如何CA认证?

要为使用ClickOnce发布的WinForms应用程序启用CA&#xff08;证书颁发机构&#xff09;认证&#xff0c;您可以按照以下步骤进行操作&#xff1a; 1. **获取数字证书**&#xff1a; - 首先&#xff0c;您需要获得一个数字证书&#xff0c;通常从受信任的CA购买。这个数字证…

unity脚本_生命周期函数 c#

帧&#xff1a;fps 即每秒钟跑的游戏帧数 游戏的本质 是一个死循环 每一次循环处理游戏逻辑就会更新一次画面 之所以能看到画面在动 是因为切换画面的速度达到一定时人眼就认为画面时流畅的 一帧就是执行一次循环 人眼舒适放松时可视帧数 24帧/s 游戏卡顿的原因&#xff1a; …

【将文本编码为图像灰度级别】以 ASCII 编码并与灰度级别位混合将文本字符串隐藏到图像像素的最低位中,使其不明显研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

土木硕设计院在职转码上岸

一、个人介绍 双非土木硕&#xff0c;98年&#xff0c;目前在北京&#xff0c;职位为前端开发工程师&#xff0c;设计院在职期间自学转码上岸&#x1f33f; 二、背景 本人于19年开始土木研究生生涯&#xff0c;研二期间去地产实习近半年(碧桂园和世茂&#xff0c;这两家的地产…

跨考408的C语言需要什么水平?

跨考408的C语言需要什么水平? 其实C语言了解一下就可以了&#xff0c;复习之前可以在b站上面随便找个视频看一下&#xff0c;指针部分重点学习一下就 行&#xff0c;C语言主要是数据结构代码部分的基础&#xff0c;对于跨考生来说&#xff0c;先看一下C语言对数据结构的复习有…

MySQL面试题合集

MySQL面经知识整理 文章目录 MySQL面经知识整理一、查询相关1.什么是MySQL的连接查询&#xff0c;左连接&#xff0c;右连接&#xff0c;内外连接2.SQL慢查询优化的方法3.大表查询如何优化 二、索引相关1.在MySQL中,可以通过哪些命令来查看查询是否使用了索引2.MySQL的最左匹配…

跨域请求方案整理实践

项目场景&#xff1a; 调用接口进行手机验证提示,项目需要调用其它域名的接口,导致前端提示跨域问题 问题描述 前端调用其他域名接口时报错提示: index.html#/StatisticalAnalysisOfVacancy:1 Access to XMLHttpRequest at http://xxxxx/CustomerService/template/examineMes…

#力扣:13. 罗马数字转整数@FDDLC

13. 罗马数字转整数 一、Java import java.util.HashMap;class Solution {public int romanToInt(String s) {HashMap<Character, Integer> m new HashMap<>() {{put(I, 1);put(V, 5);put(X, 10);put(L, 50);put(C, 100);put(D, 500);put(M, 1000);}};char[] a …

背包问题学习笔记-分组背包

题意描述&#xff1a; 有 N 组物品和一个容量是 V 的背包。每组物品有若干个&#xff0c;同一组内的物品最多只能选一个。每件物品的体积是 vij&#xff0c;价值是 wij&#xff0c;其中 i 是组号&#xff0c;j 是组内编号。求解将哪些物品装入背包&#xff0c;可使物品总体积不…

UniApp创建项目HelloWorld

浏览器预览效果镇楼 普通项目创建 点击创建完成后&#xff0c;就如下所示 确实和微信小程序开发差不多。只是稍微换了一个名字的概念了&#xff0c;这个就是开发嘛&#xff0c;不要过于纠结概念性东西。开发开发&#xff0c;开了就知道怎么发了&#xff1f; 或许是 反正write就…