SpringBoot配置文件属性值的注入,两个注解@ConfigurationProperties和@Value的区别

SpringBoot配置文件属性值的注入,两个注解@ConfigurationProperties和@Value的区别

@ConfigurationProperties

@ConfigurationProperties注解用来快速、方便地将配置文件中的自定义属性值批量注入到某个Bean对象的多个对应属性中。并且是以set方式注入(所以需要set方法,并且set方法命名要规范)


@Component
//将配置文件中所有以person开头的配置信息注入当前类中 
//前提1:必须保证配置文件中person.xx与当前Person类的属性名一致 
//前提2:必须保证当前Person中的属性都具有set方法 @ConfigurationProperties(prefix = "person") 
@Getter //lombok工具 直接生成get方法(set就不生了)
public class Person {

    private int id; //id 

    private String name; //名称 

    private List hobby; //爱好 

    private String[] family; //家庭成员 

    private Map map;

    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setHobby(List hobby) {
        this.hobby = hobby;
    }

    public void setFamily(String[] family) {
        this.family = family;
    }

    public void setMap(Map map) {
        this.map = map;
    }
}

application.yml (SpringBoot配置文件)

#对实体类对象Person进行属性配置 
person: 
  id: 1 
  name: 王二麻子 
family: 
  --hobby: 
  - play 
  - read 
  - sleep 
map:
  k1: value1 
  k2: value2 

@Value

@Value注解是Spring框架提供的,用来读取配置文件中的属性值并逐个注入到Bean对象的对应属性中,Spring Boot框架从Spring框架中对@Value注解进行了默认继承,所以在Spring Boot框架中还可以使用该注解读取和注入配置文件属性值。但是,@Value不仅会将配置文件中的属性注入到Bean对象中,还会将这个属性直接赋值给对应的属性,这点是@ConfigurationProperties不支持的,并且由于不是依赖于set方法进行注入,所以也不需要提供set方法

@Component 
public class Student { 

@Value("${person.id}") 
private int id; 

@Value("${person.name}") 
private String name; //名称 

//省略toString (不需要set)
}

最后注意:@Value注解对于包含Map集合、对象以及YAML文件格式的行内式写法的配置文件的属性注入都不支持,如果赋值会出现错误!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值