Spring Boot设置值:分别用@ConfigurationProperties和@Value给属性设值及其区别

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/XU906722/article/details/81517429

目录

@ConfigurationProperties给属性映射值

编写JavaBean

编写配置文件

测试类:

运行结果:

@Value给属性设置值

编写JavaBean

运行结果:

@ConfigurationProperties和@Value对比

应用场景


@ConfigurationProperties给属性映射值

编写JavaBean

/*
* 将配置文件application.properties中配置的每一个属性值映射到当前类的属性中;
* @ConfigurationProperties:告诉springboot将本类中所有属性和配置文件中相关的配置进行绑定;
* prefix="person":指出将配置文件中person下的所有属性进行一一映射;
*
* 注意:只有当前这个类是容器中的组件时,才可以用容器提供的@ConfigurationProperties功能;
*
* */
 
@Component
@ConfigurationProperties(prefix="person")
public class Person {
 
    private String lastName;
    private Integer age;
    private Boolean boss;
    private Date birth;
 
    private Map<String,Object> maps;
    private List<Object> lists;
 
    @Override
    public String toString() {
        return "Person{" +
                "lastName='" + lastName + '\'' +
                ", age=" + age +
                ", boss=" + boss +
                ", birth=" + birth +
                ", maps=" + maps +
                ", lists=" + lists +
                '}';
    }
 
   getter...
   setter...
 
}

编写配置文件

#private String lastName;
#private Integer age;
#private Boolean boss;
#private Date birth;
#
#private Map<String,Object> maps;
#private List<Object> lists;
 
#配置person的属性值
person.last-name=zhangsan
person.age=18
person.boss=false
person.birth=1992/02/20
person.maps.k1=v1
person.maps.k2=111
person.lists=a,b,c
 

测试类:

@RunWith(SpringRunner.class)
@SpringBootTest
public class TestApplicationConfig {
    @Autowired
    Person person;
 
    @Test
    public void testPersonProperties(){
        System.out.println(person);
    }
}

运行结果:


@Value给属性设置值

编写JavaBean

@Component
//@ConfigurationProperties(prefix="person")
public class Person {
 
    @Value("${person.last-name}") // 从配置文件中获取值
    private String lastName;
 
    @Value("#{2*8}")  // spring表达式
    private Integer age;
 
    @Value("true") // boolean值
    private Boolean boss;
    private Date birth;
 
    private Map<String,Object> maps;
    private List<Object> lists;
 
    @Override
    public String toString() {
        return "Person{" +
                "lastName='" + lastName + '\'' +
                ", age=" + age +
                ", boss=" + boss +
                ", birth=" + birth +
                ", maps=" + maps +
                ", lists=" + lists +
                '}';
    }
}

运行结果:


@ConfigurationProperties和@Value对比

  @ConfigurationProperties @Value
功能 根据配置文件中设置的属性,批量注入属性值 单个指定值
松散语法 支持(lastName可以写作last-name、last_name) 不支持
SpEL(Spring表达式) 不支持 支持
JSR303数据校验 支持(可以通过@Email等注解校验属性值是否符合要求) 不支持
复杂类型封装(Map、List等类型) 支持 不支持

应用场景

  • 如果只是某个业务中需要获取配置文件中的某项值或者设置具体值,可以使用@Value;
  • 如果一个JavaBean中大量属性值要和配置文件进行映射,可以使用@ConfigurationProperties;

 

展开阅读全文

没有更多推荐了,返回首页