Spring Boot 注解总结

时间:2021-09-03
本文章向大家介绍Spring Boot 注解总结,主要包括Spring Boot 注解总结使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1. @SpringBootApplication

这个注解是Spring Boot最核心的注解,用在 Spring Boot的主类(启动类)上,标识这是一个 Spring Boot 应用,用来开启 Spring Boot 的各项能力。

实际上这个注解是@Configuration,@EnableAutoConfiguration,@ComponentScan三个注解的组合。

由于这些注解一般都是一起使用,所以Spring Boot提供了一个统一的注解@SpringBootApplication。

@SpringBootApplication(exclude =ClassName.class)

在启动类的@EnableAutoConfiguration或@SpringBootApplication后添加(exclude = {ClassName.class}),排除此类的autoconfig自动加载。

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