• SpringBoot-注解ConfigurationProperties和value的应用(四)


    上次在博客中分享到ConfigurationProperties这个注解它的作用是:将配置文件中配置的每一个属性的值,映射到组件中也就是我们的编写的实体类嘛,它可以用我们的yaml或者properties配置文件中设置属性的值.

    接下来我们先简单写一个通过ConfigurationProperties注解给我们编写的实体类设值.

    编写实体类

    @Component
    @ConfigurationProperties(prefix = "person")
    public class Person {
     private String name;
     private  int age;
     private boolean happy;
     private Date birth;
     private Map<String,Object> maps;
     private List<Object> lists;
     private Cat cat;
    ... }

    同时加上get,set方法和toString方法

    properties配置文件

    person.name=七月的风
    person.age=10
    person.lists=小猫,小猪,小狗
    person.maps.k1=520
    person.maps.k2=1314
    person.happy=false
    person.birth=2017/6/8
    person.cat.name=猫猫
    person.cat.age=3

    结果:

    Person{name='七月的风', age=10, happy=false, birth=Thu Jun 08 00:00:00 CST 2017, maps={k1=520, k2=1314}, lists=[小猫, 小猪, 小狗], cat=Cat{name='猫猫', age=3}}

    我们可以通过注解ConfigurationProperties把配置文件中的值映射到组件中.

    注解value也可以给组件中注入值,它的实现就和Spring中实体类注册一样.下面value这个设置是一样的,只不过SpringBoot对其进行了封装,现在我们只需要在需要注入的属性上加上@value就可以给实体类的属性注入值了.

    <bean class="">
    <property name=""  value=""></property>
    </bean>

    注解@value注入值:

    @Component
    //@ConfigurationProperties(prefix = "person")
    public class Person {
        @Value("${person.name}")
     private String name;
        @Value("#{11*2}")
     private  int age;
      @Value("false")
     private boolean happy;
     private Date birth;
     private Map<String,Object> maps;
     private List<Object> lists;
     private Cat cat;
    ...
    }

    有参无参,get,set方法这里没写我们使用的时候注意加上.

    运行一下:

    Person{name='七月的风', age=22, happy=false, birth=null, maps=null, lists=null, cat=null}

    我们可以看到值也注入了.

    这里的@Value("${person.name}")     用@value("${配置文件中的属性} ")    获取配置文件中的值.

    这个@Value("#{11*2}")   用#和大括号括起来的 , 这里是Spring的表达式

    @Value("值")  这是我们普通的注入字符串.

    @ConfigurationProperties获取值和@value获取值的区别

      @ConfigurationProperties

    @value

    功能   批量注入配置文件中的属性 一个一个注入
    松散绑定 支持 不支持
    SpEl(Spring表达式) 不支持 支持
    JSR303数据校验 支持 不支持
    复杂类型的封装 支持 不支持

    那么时候用@ConfigurationProperties什么时候用@value呢?

    如果我们在某个逻辑业务中只想获取一下某个属性的值,就用@value.

    如果我们专门编写一个pojo实例类和配置文件映射就用@ConfigurationProperties.

  • 相关阅读:
    XML Schema的基本语法(转)
    Lambda 表达式参考
    LINQ查询表达式示例
    Jackson ObjectMapper类使用解析
    hdu 1242 c++ 广搜
    poj 1111 新手路过
    poj 1664 放苹果
    poj 3126 简单广搜题
    poj 1256 全排列
    HDU 2544 最短路
  • 原文地址:https://www.cnblogs.com/xiaoqiqistudy/p/11342282.html
Copyright © 2020-2023  润新知