当前位置:   article > 正文

@Value 取赋值详解与 @ConfigurationProperties 对比

@Value 取赋值详解与 @ConfigurationProperties 对比

导读:

  • @Value 与 @ConfigurationProperties 都可以从全局配置文件中获取值然后注入到属性中
  • 本来主要讲解两种取值以及注入值的区别
  1. 以前在Spring核心配置文件beans.xml用如下配置为某个类的属性注入值
  2. <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  3. <property name="driverClassName" value="${jdbc.driverclass}"></property>
  4. <property name="url" value="${jdbc.url}"></property>
  5. <property name="username" value="root"></property>
  6. <property name="password" value="123456"></property>
  7. </bean>
  8. 现在直接使用 @Value (xxx) 注解 就可以直接为某个属性注入值了,等价于上面

 

application. properties

  • 后面会使用“@Value”从"application.properties"配置文件中取值
  1. server.port=8081
  2. person.name=张三
  3. person.age=20
  4. person.man=true
  5. person.birthday=2018/12/31
  6. person.colorList=red,blue,green
  7. person.cityMap.first=北京
  8. person.cityMap.secondCity=大连
  9. person.dog.name=汪汪
  10. person.dog.age=3

 POJO 属性赋值

  1. package com.mycode.springboot.bean;
  2. import org.springframework.beans.factory.annotation.Value;
  3. import org.springframework.stereotype.Component;
  4. import java.util.Date;
  5. import java.util.List;
  6. /**
  7. * Created by Administrator on 2019/1/1.
  8. * 人 实体类
  9. *
  10. * @Component 无论是@ConfigurationProperties还是@Value注入值,都必须先使本类成为
  11. * Spring容器中的组件,这样Spring容器才能为它DI注入值
  12. */
  13. @Component
  14. public class Person {
  15. //赋值普通的Java数据类型值
  16. @Value("1001")
  17. private Integer id;
  18. //${key}:从环境变量以及配置文件中获取值
  19. @Value("${person.name}")
  20. private String name;
  21. //#{SpEL}:Spring 表达式语言
  22. @Value("#{11*2}")
  23. private Integer age;
  24. @Value("${person.man}")
  25. private Boolean man;
  26. @Value("${person.birthday}")
  27. private Date birthday;
  28. @Value("${person.colorList}")
  29. private List<String> colorList;
  30. @Override
  31. public String toString() {
  32. return "Person{" +
  33. "id=" + id +
  34. ", name='" + name + '\'' +
  35. ", age=" + age +
  36. ", man=" + man +
  37. ", birthday=" + birthday +
  38. ", colorList=" + colorList +
  39. '}';
  40. }
  41. public Integer getId() {
  42. return id;
  43. }
  44. public void setId(Integer id) {
  45. this.id = id;
  46. }
  47. public String getName() {
  48. return name;
  49. }
  50. public void setName(String name) {
  51. this.name = name;
  52. }
  53. public Integer getAge() {
  54. return age;
  55. }
  56. public void setAge(Integer age) {
  57. this.age = age;
  58. }
  59. public Boolean getMan() {
  60. return man;
  61. }
  62. public void setMan(Boolean man) {
  63. this.man = man;
  64. }
  65. public Date getBirthday() {
  66. return birthday;
  67. }
  68. public void setBirthday(Date birthday) {
  69. this.birthday = birthday;
  70. }
  71. public List<String> getColorList() {
  72. return colorList;
  73. }
  74. public void setColorList(List<String> colorList) {
  75. this.colorList = colorList;
  76. }
  77. }

测试 运行

先打开springboot的单元测试

  1. package com.mycode.springboot;
  2. import com.mycode.springboot.bean.Person;
  3. import org.junit.Test;
  4. import org.junit.runner.RunWith;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import org.springframework.test.context.junit4.SpringRunner;
  8. /**
  9. * SpringBoot单元测试
  10. * 可以在测试期间很方便的类似编码一样进行自动注入等容器的功能
  11. */
  12. @RunWith(SpringRunner.class)
  13. @SpringBootTest
  14. public class SpringbootValuedemoApplicationTests {
  15. /**
  16. * 因为POJO类使用了@Component注解,就是Spring一个组件,交由了Spring容器注入值
  17. * 所以使用@Autowired或者@Resource,DI注入在取值即可
  18. */
  19. @Autowired
  20. private Person person;
  21. @Test
  22. public void contextLoads() {
  23. System.out.println(person);
  24. }
  25. }

区别总览表: 

对比项    @ConfigurationProperties@Value
注解功能将配置文件中的属性值批量注入类的各个属性为类中的各个属性逐个赋值
松散绑定支持不支持
SpEL(Spring 表达式)不支持支持
JSR303数据校验支持不支持
复杂类型封装(例如:Map)支持不支持

补充说明:

1.两者都可以从配置文件 .yml 与 .properties 中获取到值;
2.如果项目中只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value即可;
3.如果项目中专门编写了一个JavaBean来和配置文件进行映射,则直接使用@ConfigurationProperties即可;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/939285
推荐阅读
相关标签
  

闽ICP备14008679号