SpringBoot注解

218 阅读1分钟

@Resource、@Autowired、@Value

  • @Autowired 是先根据类型(byType)查找,如果存在多个 Bean 再根据名称(byName)进行查找
  • @Resource 是先根据名称查找,如果(根据名称)查找不到,再根据类型进行查找
  • 读取中文时会乱码,因为springboot默认用CharacterReader类以StandardCharsets.ISO_8859_1编码读取properties文件, 解决方式

    @RestController
    public class TestController {
        @Value(value = "${employee.name}")
        private String name;
    
        @GetMapping("/getName")
        public String getName() throws UnsupportedEncodingException {
            String myName = new String(name.getBytes("ISO8859-1"), StandardCharsets.UTF_8);
            return myName;
        }
    }
    

@PostConstruct

在bean初始化前调用该注解修饰的方法,可以给静态变量赋值,类似的可以实现InitializingBean接口的afterPropertiesSet方法

调用时机:依赖注入 --> 初始化前(@PostConstruct)--> 初始化(InitializingBean) --> 初始化后

@RestController 和 @Controller 区别

  • @RestController = @Controller + @ResponseBody
  • @Controller一般返回一个view视图,@RestController 将对象数据直接以 JSON 形式写⼊Response对象的body中

@RequestBody

将请求体中的json数据转换成java对象

@RequestParam

获取表单中单个字段的数据

@PropertySource

该注解用于读取指定配置文件

@RestController
@RequestMapping
@PropertySource(value = "classpath:{exception.properties}", encoding = "UTF-8")
public class TestPropertiesController {
    @Autowired
    Environment env;

    @GetMapping("testEnv")
    public String testENV(HttpServletRequest request) {
        return env.getProperty("DEMO_00001");
    }
}

@ConfigurationProperties

  • yaml配置:

    com:
      company:
        list:
          - id: 1
            name: tom
            age: 20
          - id: 12
            name: jerry
            age: 25
    
  • 配置类

    @Configuration
    @ConfigurationProperties(prefix = "com.company")
    @Data
    public class UserList {
        private List<User> list;
    }
    

@ResponseStatus

@ResponseStatus(value = HttpStatus.OK),设置响应状态码(不要加reason属性,否则页面直接报错)

image.png