SpringBoot常用注解详细整理
作者:拥有必珍惜 发布时间:2022-12-15 18:53:01
前言
Spring Boot常用注解整理
提示:以下是本篇文章正文内容,下面案例可供参考
一、@SpringBootApplication
此注解是Spring Boot项目的基石,创建SpringBoot项目的Application时会默认加上
@SpringBootApplication
public class SpringSecurityApplication{
public static void main(Strings[] args){
SpringApplication.run(SpringSecurityApplication,args);
}
}
@SpringBootApplication 看作@Configuration,@EnableAutoConfiguration,@ComponentScan 注解的集合
@EnableAutoConfiguration:启用SpringBoot的自动配置机制
@ComponentScan:扫描被@Component /@Service/@Controller注解的bean,注解默认会扫描该类所在的包下所有类
@Configuration:允许在Spring上下文中注册额外的bean或导入其他配置类
二、@Bean
Bean对象注册Spring IOC容器与使用bean对象是整个Spring框架的重点,其中@Bean就是一个将方法作为Spring Bean对象注册的一种方式
package com.edu.fruit;
//定义一个接口
public interface Fruit<T>{
//没有方法
}
/*
*定义两个子类
*/
package com.edu.fruit;
@Configuration
public class Apple implements Fruit<Integer>{//将Apple类约束为Integer类型
}
package com.edu.fruit;
@Configuration
public class GinSeng implements Fruit<String>{//将GinSeng 类约束为String类型
}
/*
*业务逻辑类
*/
package com.edu.service;
@Configuration
public class FruitService {
@Autowired
private Apple apple;
@Autowired
private GinSeng ginseng;
//定义一个产生Bean的方法
@Bean(name="getApple")
public Fruit<?> getApple(){
System.out.println(apple.getClass().getName().hashCode);
System.out.println(ginseng.getClass().getName().hashCode);
return new Apple();
}
}
/*
*测试类
*/
@RunWith(BlockJUnit4ClassRunner.class)
public class Config {
public Config(){
super("classpath:spring-fruit.xml");
}
@Test
public void test(){
super.getBean("getApple");//这个Bean从哪来,
//从上面的@Bean下面的方法中返回的是一个Apple类实例对象
}
}
三、@Autowired
@Autowired自动注入注解,最常用的一种注解将对象自动导入到类中,注解自动装配bean的类
四、Component家族
@Component:通用注解,当不知道Bean在哪一层时,可以使用@Component注解标注。
@Repository: 对应持久层—Dao层的注解,用于操作数据库相关
@Service: 对应服务层的注解,用来连接Dao层做逻辑处理
@Controller:对应Spring MVC控制层,主要接收用户请求并调用service返回给前端页面
五、@RestController
@RestController注解是@Controller注解和@ResponseBody注解的合集,用来返回Json格式给页面(带Rest格式的就是返回的Json文本)
六、@Scope
声明Spring Bean的作用域
@Scope("singleton")
public Person personSingleton(){
return new Person();
}
Spring Bean的四种作用域:singleton,prototype,request,session
七、@Configuration
一般声明配置类,使用@Component或者@Configuration
@Configurantion
public class AppConfig{
@Bean
public TransferService transferService(){
return new TransferServiceImpl();
}
}
八、@RequsetMapping
@RequsetMapping是处理HTTP请求的最通用注解
@RequestMapping("/users")
public ResponseEntity<List<User>> getAllUsers(){
return userRepository.findAll();
}
八、@GetMapping
一般声明配置类,使用@Component或者@Configuration
九、@Configuration
@GetMapping 就等价于@RequestMapping(value="/users",method =RequsetMethod.GET)
即使用@GetMapping就相当用接收GET方法了
@GetMapping("/users")
public ResponseEntity<List<User>> getAllUsers(){
return userRepository.findAll();
}
十、@PostMapping
@PostMapping 就等价于@RequestMapping(value="/users",method =RequsetMethod.POST)
即使用@PostMapping就相当用接收Post方法了
@PostMapping("/users")
public ResponseEntity<List<User>> getAllUsers(){
return userRepository.findAll();
}
十一、@PutMapping
@PutMapping("/users/{userId}")等价于@RequestMapping(value = “/users/{userId}”,method = RequestMethod.PUT)
@PutMapping("/users/{userId}")
public ResponseEntity<User> updateUser(@PathVariable (value ="userId")Long userId, @Valid @RequestBody UserUpdateRequest userUpdateRequest){
...
}
十二、@DeleteMapping
@DeleteMapping("/users/{userId}")等价于@RequestMapping(value ="/users/{userId}",method = RequestMethod.DELETE)
@DeleteMapping("/users/{userId}")
public ResponseEntity deleteUser(@PathVariable(value = "userId) Long userId){
...
}
十三、@ParhVariable和@RequestParam
@PathVariable 用于获取路径参数, @RequestParam用于获取查询参数
@GetMapping("/users/{userId}/teachers")
public List<Teacher> getUserRelatedTeachers(@PathVariable("userId") Long userId,@RequestParam(value = "type",required = false) String type){
...
}
其中@PathVariable是获取请求中的{userId}值,@RequestParam则是url读取请求中type的值
比如我们url请求中/users/{123456}/teachers?type=Chinese 则我们在Controller获取到的就是userId = 123456 , type = Chinese
另在@RequestParam中 value=“参数名” required = “true/false”(true表示参数不允许不存在,false表示参数允许不存在) defaultValue="" 设置defaultValue时默认required为false。
十四、@RequestBody
用于读取Request请求的body部分,且Content-Type为application/json格式数据,接收到数据后会自动将数据绑定在Java对象上,系统会使用HttpMessageConverter来讲请求的body中的json字符串转换为Java对象
@PostMapping("/sing-up")
public ResponseEntity signUp(@RequsetBody @Valid UserRegisterRequest userRegisterRequest){
userService.save(userRegisterRequest);
return ResponseEntity.ok().build()'
}
这就是典型的RequestBody在Post请求里进行传输数据当后端Controller接收到json格式的数据后,直接就会生成Java对象映射到UserRegisterRequest类上,这样就可以直接将userRegisterRequest对象进行存储。顺便说一下@Valid注解是用
来验证数据格式是否符合要求,如果符合要求则通过,不符合要求,提示注解中message信息
十五、读取配置信息
读取application.yml的注解
wuhan2020: 武汉加油!中国加油!
my-profile:
name: name
email: XXXX@qq.com
library:
location: dalian
books:
- name: name1
description: description1
- name: name2
description: description2
- name: name3
description: description3
1.@Value
使用@Value("${property}")读取简单的配置信息
@Value("${wuhan2020}")
String wuhan2020;
2.@ConfigurationProperties
通过@ConfigurationProperties读取配置信息并与bean绑定
@Component
@ConfigurationProperties(prefix = "library")
class LibraryProperties{
@NotEmpty
private String location;
private List<Book> books;
@Data
@ToString
static class Book{
String name;
String description;
}
}
十六、@Qualifier
当有多个同一类型的Bean时,可以用@Qualifier(“name”)来指定。与@Autowired配合使用。@Qualifier限定描述符除了能根据名字进行注入,但能进行更细粒度的控制如何选择候选者,具体使用方式如下:
@Autowired
@Qualifier(value = “demoInfoService”)
private DemoInfoService demoInfoService;
十七、@MapperScan
spring-boot支持mybatis组件的一个注解,通过此注解指定mybatis接口类的路径,即可完成对mybatis接口的扫描。
它和@mapper注解是一样的作用,不同的地方是扫描入口不一样。@mapper需要加在每一个mapper接口类上面。所以大多数情况下,都是在规划好工程目录之后,通过@MapperScan注解配置路径完成mapper接口的注入。
添加mybatis相应组建依赖之后。就可以使用该注解。
十八、@CrossOrigin
@CrossOrigin(origins = “”, maxAge = 1000) 这个注解主要是为了解决跨域访问的问题。这个注解可以为整个controller配置启用跨域,也可以在方法级别启用。
十九、@ControllerAdvice
@ControllerAdvice 和 @RestControllerAdvice:通常和@ExceptionHandler、@InitBinder、@ModelAttribute一起配合使用。
@ControllerAdvice 和 @ExceptionHandler 配合完成统一异常拦截处理。
@RestControllerAdvice 是 @ControllerAdvice 和 @ResponseBody的合集,可以将异常以json的格式返回数据。
如下面对数据异常返回的统一处理。
二十、资源导入注解
@ImportResource @Import @PropertySource 这三个注解都是用来导入自定义的一些配置文件。
@ImportResource(locations={}) 导入其他xml配置文件,需要标准在主配置类上。
导入property的配置文件 @PropertySource指定文件路径,这个相当于使用spring的标签来完成配置项的引入。
@import注解是一个可以将普通类导入到spring容器中做管理
二十一、@Transactional
通过这个注解可以声明事务,可以添加在类上或者方法上。
在spring boot中 不用再单独配置事务管理,一般情况是我们会在servcie层添加了事务注解,即可开启事务。要注意的是,事务的开启只能在public 方法上。并且主要事务切面的回滚条件。正常我们配置rollbackfor exception时 ,如果在方法
里捕获了异常就会导致事务切面配置的失效。
来源:https://blog.csdn.net/zhu7478848/article/details/121737659


猜你喜欢
- 如果发现maven项目里面src/main/resources下的配置文件或src/main/java下的xml配置文件未能同步至targe
- 概述透视表是依据已有数据源来创建的交互式表格,我们可在excel中创建透视表,也可编辑已有透视表。所需工具:Free Spire.XLS f
- spring-task定时任务动态配置修改执行时间因项目需要,几个定时任务需要人为动态设置执行时间,于是乎吧,就查阅相关资料,是可以动态设置
- 概述日常工作中,我们经常会有发送 HTTP 网络请求的需求,概括下我们常见的发送 HTTP 请求的需求内容:可以发送基本的 GET/POST
- 在 Android design support 包中提供了一种在输入不合适字符时一直显示的提示方式来显示,现在已经开始在更多的应用上被使用
- 前言很久没有写关于 Spring 的文章了,最近在系统梳理 Dubbo 代码的过程中发现了 XML schema 这个被遗漏的知识点。由于工
- 当前的Winform分页控件中,当前导出的数据一般使用Excel来处理,Excel的文档可以用于后期的数据展示或者批量导入做准备,因此是比较
- 1.第一步在android studio的project视图模式下右击res文件夹2.然后找到New --> Android reso
- 本文实例讲述了C#微信公众号开发之接收事件推送与消息排重的方法。分享给大家供大家参考。具体分析如下:微信服务器在5秒内收不到响应会断掉连接,
- BufferedReader读取本地文件在使用BufferedWriter写入文件时,如果忘记关闭文件(close)同时也没有调用flush
- 前言Lifecycle是Jetpack架构组件中用来感知生命周期的组件,使用Lifecycles可以帮助我们写出和生命周期相关更简洁更易维护
- 有时候数据库文档需要整理,可是只能手动的复制粘贴,心中一万只草泥马奔腾而过。。。screw简洁好用的数据库表结构文档生成工具。1. 创建项目
- 数据库表结构departmentemployee要求一现在的要求是输入 id 把 employee 表的对应员工数据查询出来,并且查询出该员
- 本文将向大家展示如何拍照截图。先看看效果图:拍照截图有点儿特殊,要知道,现在的Android智能手机的摄像头都是几百万的像素,拍出来的图片都
- 二维码是什么二维码 QR Code,全称为:Quick Response Code,最早用于日本汽车制造业追踪零部件。QR现有40个标准版本
- 前言《英文猜词游戏》代码行数没有超过200行,是之前为了背英语单词,特意研发的小游戏。主要设计1.事先准备单词文本。2.为了让玩家能与程序互
- 本文浅析了C#的复制和克隆技术,对于有需要的朋友可以参考下。在C#中,用HashTable,DataTable等实现复制和克隆,下面直接看例
- 概述Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,
- 本文实例为大家分享了Android自定义View画圆的具体代码,供大家参考,具体内容如下引入布局<?xml version="
- 基本哪些属于引用类型类(object,string),接口、数组、委托引用类型分配在哪里引用类型变量位于线程栈。引用类型实例分配在托管堆上。