spring常用注解总结

  • @SpringBootApplication

    默认在主类加上,@Configuration@EnableAutoConfiguration@ComponentScan 注解的集合.

  • @EnableAutoConfiguration:启用 SpringBoot 的自动配置机制

  • @ComponentScan:扫描被@Component (@Repository,@Service,@Controller)注解的 bean,注解默认会扫描该类所在的包下所有的类。

  • @Configuration:允许在 Spring 上下文中注册额外的 bean 或导入其他配置类

  • @Autowired,自动导入对象到类中,注意被注入进的类同样要被 Spring 容器管理.

  • @Component,@Repository,@Service, @Controller:类标识成可用于 @Autowired 注解自动装配的 bean 的类

    • @Component:通用的注解,可标注任意类为 Spring 组件。如果一个 Bean 不知道属于哪个层,可以使用@Component 注解标注。
    • @Repository : 对应持久层即 Dao 层,主要用于数据库相关操作。
    • @Service : 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层。
    • @Controller : 对应 Spring MVC 控制层,主要用于接受用户请求并调用 Service 层返回数据给前端页面。
  • @RestController:

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

  • @Scope:声明 Spring Bean 的作用域

    四种常见的 Spring Bean 的作用域:

    • singleton : 唯一 bean 实例,Spring 中的 bean 默认都是单例的。
    • prototype : 每次请求都会创建一个新的 bean 实例。
    • request : 每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP request 内有效。
    • session : 每一个 HTTP Session 会产生一个新的 bean,该 bean 仅在当前 HTTP session 内有效。
  • @Configuration

    一般用来声明配置类,可以使用 @Component注解替代,不过使用注解@Configuration声明配置类更加语义化。

  • @GetMapping("users") 等价于@RequestMapping(value="/users",method=RequestMethod.GET)

  • @PostMapping("users") 等价于@RequestMapping(value="/users",method=RequestMethod.POST)

  • @PutMapping("/users/{userId}") 等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.PUT)

  • @DeleteMapping("/users/{userId}")等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.DELETE)

  • @PathVariable @RequestParam
    @PathVariable用于获取路径参数,@RequestParam用于获取查询参数。

    @GetMapping("/klasses/{klassId}/teachers")
    public List getKlassRelatedTeachers(
           @PathVariable("klassId") Long klassId,
           @RequestParam(value = "type", required = false) String type ) {
    ...
    }

    如果我们请求的 url 是:/klasses/123456/teachers?type=web

    那么我们服务获取到的数据就是:klassId=123456,type=web

  • @RequestBody

    用于读取 Request 请求(可能是 POST,PUT,DELETE,GET 请求)的 body 部分并且Content-Type 为 application/json 格式的数据,接收到数据之后会自动将数据绑定到 Java 对象上去。系统会使用HttpMessageConverter或者自定义的HttpMessageConverter将请求的 body 中的 json 字符串转换为 java 对象。

    @PostMapping("/sign-up")
    public ResponseEntity signUp(@RequestBody @Valid UserRegisterRequest userRegisterRequest) {
    userService.save(userRegisterRequest);
    return ResponseEntity.ok().build();
    }

    一个请求方法只可以有一个@RequestBody,但是可以有多个@RequestParam@PathVariable

  • @Value(常用)

    使用 @Value("${property}") 读取比较简单的配置信息:

    @Value("${wuhan2020}")
    String wuhan2020;
  • @ConfigurationProperties(常用)

    通过@ConfigurationProperties读取配置信息并与 bean 绑定。

  • 参数校验,JSR(Java Specification Requests). Hibernate Validator 框架.所有的注解,推荐使用 JSR 注解,即javax.validation.constraints,而不是org.hibernate.validator.constraints

    • @NotEmpty 被注释的字符串的不能为 null 也不能为空
    • @NotBlank 被注释的字符串非 null,并且必须包含一个非空白字符
    • @Null 被注释的元素必须为 null
    • @NotNull 被注释的元素必须不为 null
    • @AssertTrue 被注释的元素必须为 true
    • @AssertFalse 被注释的元素必须为 false
    • @Pattern(regex=,flag=)被注释的元素必须符合指定的正则表达式
    • @Email 被注释的元素必须是 Email 格式。
    • @Min(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值
    • @Max(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值
    • @DecimalMin(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值
    • @DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
    • @Size(max=, min=)被注释的元素的大小必须在指定的范围内
    • @Digits(integer, fraction)被注释的元素必须是一个数字,其值必须在可接受的范围内
    • @Past被注释的元素必须是一个过去的日期
    • @Future 被注释的元素必须是一个将来的日期
  • @Valid如果验证失败,它将抛出MethodArgumentNotValidException

    • 验证请求体RequestBody
    @RestController
    @RequestMapping("/api")
    public class PersonController {
    
        @PostMapping("/person")
        public ResponseEntity getPerson(@RequestBody @Valid Person person) {
            return ResponseEntity.ok().body(person);
        }
    }
      @Data
      @AllArgsConstructor
      @NoArgsConstructor
      public class Person {
    
          @NotNull(message = "classId 不能为空")
          private String classId;
    
          @Size(max = 33)
          @NotNull(message = "name 不能为空")
          private String name;
    
          @Pattern(regexp = "((^Man$|^Woman$|^UGM$))", message = "sex 值不在可选范围")
          @NotNull(message = "sex 不能为空")
          private String sex;
    
          @Email(message = "email 格式不正确")
          @NotNull(message = "email 不能为空")
          private String email;
      }
    • 验证请求参数(Path Variables 和 Request Parameters)

      注意@Validated注解要先加在类上

      @RestController
      @RequestMapping("/api")
      @Validated//note!!!!
      public class PersonController {
      
        @GetMapping("/person/{id}")
        public ResponseEntity getPersonByID(@Valid @PathVariable("id") @Max(value = 5,message = "超过 id 的范围了") Integer id) {
            return ResponseEntity.ok().body(id);
        }
      }
      

()

发表评论