Springboot学习笔记三、 @ConfigurationProperties 与@Value 对比

一、介绍

1、两个注解作用都是将每一个属性的值,映射到组件中。

2、@ConfigurationProperties 可以批量绑定配置文件中的值与类中的属性。

二、对比

 @ConfigurationProperties@Value
功能批量注入配置文件中的属性一个一个绑定
松撒绑定(松撒语法)支持不支持
SpEL不支持支持
JSR303数据校验支持不支持
复杂数据类型封装支持不支持

1)说明松散绑定 是只 person.last-name   与类中 lastName中的绑定 用@Value绑定会报错

2)复杂类型封装是指 类似Map List 这种会报错

三、代码

package com.hao.firstdemo.configs;


import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;

import javax.validation.constraints.Email;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author haoxiansheng
 * @data 2020/5/27
 */
@Component
@ConfigurationProperties(prefix = "person") // 默认从全局文件中获取值
@PropertySource(value = {"classpath:person.properties"})
@Data
@Validated // 开启注解校验
public class Person {
    /**
     * <bean class="Person">
     *     <property name="lastName" value="字面量/${key}从环境变量配置文件中获取/#{SPEL}"><property/>
     * <bean/>
     */
    //@Email ConfigurationProperties 支持注解校验 Value 不支持
    //@Value("${person.lastName}")
    private String lastName;
    //@Value("#{11*2}") // SPEL 表达式
    private Integer age;
    //@Value("true")
    private Boolean boss;
    private Date birth;
    //@Value("${person.maps}") // 不支持复杂类型的封装
    private Map<String, Object> maps;
    private List<String> lists;
    private Dog dog;

    @Override
    public String toString() {
        return "Person{" +
                "lastName='" + lastName + '\'' +
                ", age=" + age +
                ", boss=" + boss +
                ", birth=" + birth +
                ", maps=" + maps +
                ", lists=" + lists +
                ", dog=" + dog +
                '}';
    }
}

package com.hao.firstdemo.configs;

import lombok.Data;
import lombok.ToString;

/**
 * @author haoxiansheng
 * @data 2020/5/27
 */
@Data
@ToString
public class Dog {
    private String name;
    private Integer age;
}



// application,properties中的属性
server.port=8081
spring.profiles.active=dev

# 配置person的值
#person.last-name=zhangsan
person.lastName=zhangsan
person.age=18
person.birth=1996/01/02
person.boss=false
person.maps.k1=v1
person.maps.k2=v2
person.lists=a,b,c
person.dog.name=dog
person.dog.age=10

@PropertySource(value = {"classpath:person.properties"})
// 外部加载的方式
## 配置person的值
##person.last-name=zhangsan
#person.lastName=zhangsan
#person.age=18
#person.birth=1996/01/02
#person.boss=false
#person.maps.k1=v1
#person.maps.k2=v2
#person.lists=a,b,c
#person.dog.name=dog
#person.dog.age=10

四、批量绑定适合用 @ConfigurationProperties ,@Value适合绑定少一点的比如一两个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值