Springboot|第五篇@Value和@ConfigurationProperties获取值比较

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+"";
    }
}

浏览器访问:
在这里插入图片描述

说点什么

QQ学习交流群:277300227
微信公众号(欢迎关注):SeptemberNotes
Springboot|第五篇@Value和@ConfigurationProperties获取值比较_第1张图片

你可能感兴趣的:(SpringBoot)