@ConfigurationProperties 与 @Value 对比
目录
@ConfigurationProperties VS @Value
本文导读
1、@Value 与 @ConfigurationProperties 都可以从全局配置文件中获取值然后注入到属性中
2、本来主要讲解两种取值以及注入值的区别
3、对于 "@ConfigurationProperties 注入值"不了解的可以参考《Spring Boot 全局配置文件》
@Value 取值注入
-
* 以前在Spring核心配置文件beans.xml用如下配置为某个类的属性注入值
-
* <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
-
* <property name="driverClassName" value="${jdbc.driverclass}"></property>
-
* <property name="url" value="${jdbc.url}"></property>
-
* <property name="username" value="root"></property>
-
* <property name="password" value="123456"></property>
-
* </bean>
-
* 现在直接使用 @Value (xxx) 注解 就可以直接为某个属性注入值了,等价于上面
application. yml
1、使用 “@Value” 注解从全局配置文件 "application.yml" 取值,然后为指定的属性赋值。
![在这里插入图片描述](https://img-blog.csdn.net/20180711172916135?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbmdteDE5OTMzMjg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
server: port: 8081 user: id: 110 lastName: 张三 age: 110 birthday: 2018/07/11 colorList: - red - yellow - green cityMap: {mapK1: mapV1,mapK2: mapV2} dog: id: 9527 name: 哮天犬 age: 100
POJO 属性取赋值
1、这里演示 @Value 获取全局配置文件 application.yml 中的值为 POJO 的属性赋值,当然后不仅限于 POJO 的属性,可以为任意类的属性赋值。(当然前提是被赋值的属性所在的类已经被 Spring 容器管理)
package com.lct.wmx.damain; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; /** * Created by Administrator on 2018/7/11 0011. * 狗 实体类 * * @Component 无论是@ConfigurationProperties还是@Value注入值,都必须先使本来成为- * Spring容器中的组件,这样Spring容器才能为它DI注入值 */ @Component public class Dog { /** * 赋值普通的Java数据类型值 */ @Value("1000") private Integer id; /** * ${key}:从环境变量以及配置文件中获取值 */ @Value("${user.lastName}") private String name; /** * #{SpEL}:Sping 表达式语言 */ @Value("#{10*3}") private Integer age; public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Dog{" + "age=" + age + ", id=" + id + ", name='" + name + '\'' + '}'; } }
测试 运行
package com.lct.wmx; import com.lct.wmx.damain.Dog; import com.lct.wmx.damain.User; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import javax.annotation.Resource; /** * SpringBoot单元测试 * 可以在测试期间很方便的类似编码一样进行自动注入等容器的功能 */ @RunWith(SpringRunner.class) @SpringBootTest public class HelloWorldQuickApplicationTests { /** * 因为POJO类使用了@Component注解,就是Spring一个组件,交由了Spring容器注入值 * 所以使用@Autowired或者@Resource,DI注入在取值即可 */ @Resource private Dog dog; @Test public void contextLoads() { System.out.println("------------------------------********************--------------------------------------------"); System.out.println("·······················" + dog); } }
1、在测试类中运行结果如下:
![在这里插入图片描述](https://img-blog.csdn.net/20180711180306621?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbmdteDE5OTMzMjg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
@ConfigurationProperties VS @Value
对比项 | @ConfigurationProperties | @Value |
注解功能 | 将配置文件中的属性值批量注入类的各个属性 | 为类中的各个属性逐个赋值 |
松散绑定 | 支持 | 不支持 |
SpEL(Spring 表达式) | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
1、两者都可以从配置文件 *.yml 与 *.properties 中获取到值;
2、如果项目中只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用 @Value 即可;
3、如果项目中专门编写了一个 JavaBean 来和配置文件进行映射,则直接使用@ConfigurationProperties即可;
4、具体要具需求而定。
上一篇: Html一些常用的标签知识
下一篇: If you want an embedded database please put a supported one on the classpath
推荐阅读
-
Windows XP与Vista的性能对比评测
-
简要了解Hadoop集群技术与Spark集群技术的对比
-
i7-7700HQ相比i7-6700HQ强多少?intel i7-7700HQ与6700HQ对比评测
-
PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】 原创
-
iPad mini2与1有什么区别 iPad mini2与iPad mini1评测对比(图文)
-
GTX 1080与A卡哪个好?NVIDIA GTX 1080/A卡异步运算对比评测
-
百度大神卡和百度小神卡有什么区别?百度小神卡与大神卡资费区别对比介绍
-
ASPX中的用户控件与ASP中的INCLUDE方法对比
-
JSON与JS对象的区别与对比
-
举例讲解Python中字典的合并值相加与异或对比