Spring Boot 注解总结
1. @SpringBootApplication
这个注解是Spring Boot最核心的注解,用在 Spring Boot的主类(启动类)上,标识这是一个 Spring Boot 应用,用来开启 Spring Boot 的各项能力。
实际上这个注解是@Configuration,@EnableAutoConfiguration,@ComponentScan三个注解的组合。
由于这些注解一般都是一起使用,所以Spring Boot提供了一个统一的注解@SpringBootApplication。
@SpringBootApplication(exclude =ClassName.class)
2. @ComponentScan
@ComponentScan(basePackages = {"com.a.process","org.jeecg"})
指定Spring扫描注解的package,启动类使用。如果没有指定包,那么默认会扫描此配置类所在的package。
3.@MapperScan
@MapperScan("com.a.process.mapper")
通过使用@MapperScan可以指定要扫描的Mapper类的包的路径,启动类使用。
接口类上添加@Mapper,在编译之后会生成相应的接口实现类,这种方式要求每一个mapper类都需要添加此注解,比较麻烦。
4.@EnableAsync
使用@EnableAsync来开启异步的支持,使用多线程,启动类使用。
@Async
使用@Async就可以定义一个线程任务,来对某个方法进行异步执行。
5.@log4j和@slf4j
log4j( log for java )
Apache的一个开源项目,可以灵活地记录日志信息,我们可以通过Log4j的配置文件灵活配置日志的记录格式、记录级别、输出格式,而不需要修改已有的日志记录代码。slf4j:simple log facade for java
slf4j不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。可以将log4j看成是一个完整的日志库,而slf4j是一个日志库的规范接口。
6.@EnableScheduling
开启定时任务,启动类使用。
编写定时任务
任务的类上写@Component,将当前的任务类注入到容器。
任务方法上写@Scheduled(),参数为fixedDelay、fixedRate、cron表达式。
fixedDelay和fixedRate,单位是毫秒,它们的区别就是:fixedRate就是每多少时间执行一次,不论你业务执行花费了多少时间。而fixedDelay是当任务执行完毕后隔多少时间再执行。根据实际业务不同,选择不同的方式。
cron表达式:比如要设置每天什么时候执行,就可以用它,有专门的语法,不再详细描述。
7.@Controller
通常是被使用服务于web 页面的。默认,你的controller方法返回的是一个string 串,是表示要展示哪个模板页面或者是要跳转到哪里去。return时会被视图处理器识别成静态文件的路径,默认为templates文件夹下。如return "test/hello"
表示的是默认路径下的test文件夹中的名叫hello的文件,带上后缀名.html或btl等也可以识别。
8.@ResponseBody
@ResponseBody可以标注方法也可以标注类,当标注方法时表示该方法的返回值会被解析成json(字符串会不会被转换),直接写入HTTP Response Body中,视图处理器将不会将return的参数识别成路径。当它标注类时,类中所有方法的返回值都将直接返回值到页面,相当于给所有的类都加上@ResponseBody注解。
9.@RestController
@RestController是@Controller和@ResponseBody的结合体,只能注解类,return返回的值将被转换成json,字符串除外,直接写入HTTP相应体返回到页面中。
10.@RequestMapping
它可以注解类也可以注解方法,注解类时标注请求的路径,标注方法时表示将特定的URL映射到指定的方法。可以用(value="url")的写法,支持URL模板,正则表达式;也可以直接用("url")。
8种属性
(1)value属性
由于value属性是@RequestMapping注释的默认属性,因此如果只有唯一的属性,则可以省略该属性名,如果有超过一个属性,则必须写上value属性名称。即如下两个标注含义一样:
@RequestMapping(value="getUser")
@RequestMapping("getUser")
(2)path属性
和(1)中的value属性使用一致,两者都是用来作为映射使用的。path属性支持通配符匹配。@RequestMapping(value="getUser")、@RequestMapping(path="getUser"),这两种情况都能对getUser()方法进行访问
(3)name属性
相当于注释,增加可读性
(4)method属性
该属性用来表示该方法仅仅处理哪些HTTP请求方式,如果没有method属性,则说明该方法支持全部的HTTP请求。
如:@RequestMapping(value = "url", method = RequestMethod.GET)
(5)params属性
该属性指定,请求中必须包含params属性规定的参数时,才能执行该请求
@RequestMapping(value = "getUser",params = "flag") @ResponseBody public ModelAndView getUser(){ ModelAndView view = new ModelAndView(); return view; }
以上方法,说明请求中必须包含flag参数才能执行该请求,flag参数值不做要求
http://localhost:8080/getUser?flag=xxx 此URL能够正常访问getUser()方法
http://localhost:8080/getUser 此URL则不能正常访问getUser()方法
@RequestMapping(value = "getUser",params = "flag=true") @ResponseBody public ModelAndView getUser(){ ModelAndView view = new ModelAndView(); return view; }
以上方法,说明请求中必须包含flag参数,而且参数值必须为true才能执行该请求
http://localhost:8080/getUser?flag=true 此URL能够正常访问getUser()方法
http://localhost:8080/getUser?flag=false 此URL不能正常访问getUser()方法
http://localhost:8080/getUser 此URL则不能正常访问getUser()方法
(6)header属性
该属性指定,请求中必须包含某些指定的header值,才能够让该方法处理请求
@RequestMapping(value = "getUser",headers = "Referer=http://www.xxx.com") @ResponseBody public ModelAndView getUser(){ ModelAndView view = new ModelAndView(); return view; }
以上方法 ,必须满足请求的header中包含了指定的"Referer"请求头和值为"http://www.xxx.com"时,才能执行该请求
(7)consumers属性
指定处理请求的提交内容类型(Content-Type),例如:application/json、text/html时,才能够让该方法处理请求
(8)roduces属性
指定返回的内容类型,返回的内容类型必须是request请求头(Accept)中所包含的类型。
此外,produces属性还可以指定返回值的编码
@RequestMapping(value = "getUser",produces = "application/json,charset=utf-8"),则指明返回utf-8编码
现在比较典型的REST Controller 一般是像下面这样来映射路由的:
@RestController @RequestMapping("/team") public class UsersController { @GetMapping("/users") public List<User> index() {...} }
11.@GetMapping、@PostMapping、@PutMapping、@PatchMapping、@DeleteMapping
路由http method,从命名约定我们可以看到每个注释都是为了处理各自的传入请求方法类型,即@GetMapping用于处理请求方法的GET类型,@ PostMapping用于处理请求方法的POST类型等。
@GetMapping("url")等同于@RequestMapping(value = "url", method = RequestMethod.GET),大大简化了书写方法。
12.传统的controller和REST风格的controller
传统的controller,这类型的controller返回值表示要展示的页面或要跳转到哪个请求。
@Controller @RequestMapping("/users") public class UsersController { @GetMapping public String index() { return "users/index"; } @GetMapping("{id}") public String show(@PathVariable long id) { return "users/show"; }
@PostMapping @ResponseStatus(HttpStatus.CREATED) public String create(@ModelAttribute UserCreateRequest request) {
return "redirect:/users"; }
@PutMapping("{id}") public String update(@PathVariable long id, @RequestBody UserUpdateRequest request) { return "redirect:/users/" + id; }
@DeleteMapping("{id}") public String delete(@PathVariable long id) { return "redirect:/users"; } }
REST controller,这类型的controller返回值是一些对象,这些对象要被序列化成JSON、XML等其他格式,并不是表示要跳转到哪个HTML模板。
@RestController @RequestMapping("/users") public class UsersController { @GetMapping public List<User> index() {
return new ArrayList<User>(); } @GetMapping("{id}") public User show(@PathVariable long id) {
return new User(); } @PostMapping @ResponseStatus(HttpStatus.CREATED) public User create(@RequestBody UserCreateRequest request) {
return new User(); } @PutMapping("{id}") public User update(@PathVariable long id, @RequestBody UserUpdateRequest request) {
return new User(); } @DeleteMapping("{id}") public void delete(@PathVariable long id) {} }
13.
14.
15.
16.
17.
18.
19.
20.
参考:https://cloud.tencent.com/developer/article/1082720
https://blog.csdn.net/lzb348110175/article/details/88552507
原文地址:https://www.cnblogs.com/wx23/p/15218738.html
- 3秒钟,用python破解加密PDF|附工具地址
- [译]Laravel 5.0 之云存储驱动
- [译]Laravel 5.0 之自定义错误页面
- 使用Google的Quickdraw创建MNIST样式数据集!
- CentOS 7 开启 BBR 加速
- 开源项目Minio:提供非结构化数据储存服务
- [译]Laravel 5.0 之事件自动生成
- [译]Laravel 5.0 之 Eloquent 属性转换
- [译]Laravel 5.0 之事件及处理程序
- 自相关与偏自相关的简单介绍
- [译]Laravel 5.0 之命令及处理程序
- Deep Photo Styletransfer的一种纯Tensorflow实现,教你如何转换图片风格
- 如何提前体验 Laravel 5.5
- Laravel 4 小技巧两则
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Leetcode 第23场双周赛D 5363. 做菜顺序(DP,贪心)
- Leetcode 22. 括号生成 (括号匹配,dfs)
- MQ 系列之 ActiveMQ 介绍
- Python Tips(1) 数字与字符串之间转换,采用内置函数
- Spring Web MVC 拦截器
- Spring Web MVC 响应消息
- Codeforces Round #633 (Div. 2)D Edge Weight Assignment(构造、树的权值异或)
- Spring Web MVC 请求消息
- Codeforces Round #633 (Div. 2) A Filling Diamonds (假题,观察)
- 如何管理和组织一个机器学习项目
- Spring Web MVC 简单使用
- Spring 中的 JDBC
- IDEA 快键键:展开所有文件夹、折叠所有文件夹(自定义)
- mysql 数据库的悲观锁和乐观锁
- C语言 二维数组和指针的一些笔记