Springboot 是简化Spring应用开发的创建、运行、调试、部署等一系列问题的框架是J2EE开发的一站式解决方案,自动装配的特性可以让我们更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖就可以轻松的搭建出一个WEB工程
[如果你觉得对你有帮助,欢迎转发分享给更多的人学习]
上篇学习了学习Spring Boot的配置文件的一些基本语法,接下来还是继续深入学习分析@Value获取值和@ConfigurationProperties获取值比较
上篇使用@Component和@ConfigurationProperties(prefix = “person”)就可以将配置文件中的每个属性,映射到这个Person类组件中,还有一个属性@Value可以将配置文件中的信息映射注入到Person的属性中,@Value还可以直接给属性配置表达式值 @Value("#{10*2}"),而@ConfigurationProperties却不支持
@Component
//@ConfigurationProperties(prefix = “person”)
public class Person {
@Value("${person.last-name}")
private String lastName;
@Value("#{10*2}")
private Integer age;
@Value("#{true}")
}
测试结果输出:
Person{lastName='张三', age=20, boss=true, birth=null, maps=null, lists=null, dog=null}
@ConfigurationProperties支持复杂类型封装,而@Value不支持,什么是复杂类型的封装?之前我们写的private Mapmaps就是复杂类型封装,不可以直接使用@Value("#{person.maps}")注入配置文件的属性值
@Value不支持JSR303数据校验,@ConfigurationProperties支持JSR303数据校验
注解在lastName的@Email的意思是lastName必须是一个合法的电子邮件地址,否则就是不合法值
@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
@Email
private String lastName;
private Integer age;
private Boolean boss;
}
报错情况:
Property: person.lastName
Value: 张三
Origin: class path resource [application.properties]:2:18
Reason: 不是一个合法的电子邮件地址
而使用@Value配置注入却不会报错
@Component
@Validated
public class Person {
@Value("${person.last-name}")
private String lastName;
private Integer age;
private Boolean boss;
程序的输出结果:
Person{lastName='张三', age=null, boss=null, birth=null, maps=null, lists=null, dog=null}
配置文件yml还是properties他们都能获取到值,什么时候使用@Value什么时候使用@ConfigurationProperties;
如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;
从配置文件中获取一个name来sayhello
@RestController
public class HelloController {
@Value("${person.last-name}")
private String name;
@RequestMapping(value = "/sayhello")
public String sayhello(){
return "Hello,"+name+"";
}
}