SpringBoot中注解@ConfigurationProperties与@Value的区别与使用详解

 更新时间:2021年09月16日 10:22:53   作者:阳光下的米雪  
本文主要介绍了SpringBoot中注解@ConfigurationProperties与@Value的区别与使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

注解@ConfigurationProperties

该注解的作用是将配置文件中配置的每一个属性的值,映射到这个组件中。@ConfigurationProperties :告诉springboot将本类中的所有属性和配置文件中相关的配置进行绑定 prefix = “person”:配置文件中哪个下面的所有属性进行一一映射。简言之,也就是只有这个组件是容器中的组件;才能在容器中提供的@ConfigurationProperties功能。

注解@Value

该注解就是将配置文件中的某项值读出来,@Value("$(key)"),其中key的值从环境变量、配置文件中获取值

区别

该表格展示了这两个注解的区别,其中,松散语法绑定的定义如下:

松散语法绑定:

  • - person.firstName : 使用标准方法
  • - person.first-name : 大写用-
  • - person.first_name : 大写用_
  • - PERSON_FIRST_NAME : 推荐系统属性使用这种写法

SpEl语法表示:

其中,@Value可以直接计算表达式的值,如:@Value(#{11*2})

JSR303数据校验:

注解@ConfigurationProperties(prefix = "person")可以搭配@Validated使用

复杂类型封装:

支持读入类中的所有属性,比如,想读如person中的所有属性,使用@ConfigurationProperties(prefix = "person")

# 配置person的值
person.last-name=zhangsan
person.age=18
person.birth=2017/12/12
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,v
person.dog.name=二哈
person.dog.age=2

使用方法区别:

配置文件无论是yml还是properties他们都能获取
如果说,我们只是说在某个业务逻辑中需要获取一下配置文件中的某项值,就使用@Value
如果说,我们专门编写了一个javaBean来和配置文件映射,我们就直接使用

配置文件注入值数据校验

注入值校验主要用的是@Validated注解,像代码中private String lastName;可以使用@Email,虽然使用姓名使用邮件格式可能不太合适,此处只是为了举例子,意思是lastName必须是邮箱格式

@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
    /**
     * <bean class="Person">
     *     <property name="lastNme" value="字面量/${key}从环境变量、配置文件中获取值/#{SpEl}">
     *
     *     </property>>
     * </bean>
     */
    //lastName必须是邮箱格式
    @Email
//    @Value("${person.last-name}")
    private String lastName;
//    @Value("#{11*2}")
    private Integer age;
//    @Value("true")
    private Boolean boss;
    private Date birth;

//    @Value("${person.maps}")
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Boolean getBoss() {
        return boss;
    }

    public void setBoss(Boolean boss) {
        this.boss = boss;
    }

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    public Map<String, Object> getMaps() {
        return maps;
    }

    public void setMaps(Map<String, Object> maps) {
        this.maps = maps;
    }

    public List<Object> getLists() {
        return lists;
    }

    public void setLists(List<Object> lists) {
        this.lists = lists;
    }

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }

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

到此这篇关于SpringBoot中注解@ConfigurationProperties与@Value的区别与使用详解的文章就介绍到这了,更多相关SpringBoot @ConfigurationProperties @Value内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中的包、抽象类、接口详解(最新整理)

    Java中的包、抽象类、接口详解(最新整理)

    文章介绍了Java中的包、抽象类、接口以及实现多个接口的概念,包用于组织类,避免命名冲突,抽象类用于定义不能被实例化的类,可以包含抽象方法,接口则定义了一组抽象方法,可以被类实现,实现多个接口可以实现类似多继承的效果,感兴趣的朋友一起看看吧
    2025-02-02
  • 解决使用RestTemplate时报错RestClientException的问题

    解决使用RestTemplate时报错RestClientException的问题

    这篇文章主要介绍了解决使用RestTemplate时报错RestClientException的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java PDF 添加数字签名的实现方法

    Java PDF 添加数字签名的实现方法

    这篇文章主要介绍了Java PDF 添加数字签名的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Mybatis-Plus通用枚举的使用详解

    Mybatis-Plus通用枚举的使用详解

    这篇文章主要介绍了Mybatis-Plus通用枚举的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Java网络通信中URL与HTTP编程技术详解

    Java网络通信中URL与HTTP编程技术详解

    要想实现网络编程,除了可以使用Socket之外,我们还可以利用URL编程或HTTP编程技术,所以今天这篇文章,就给大家介绍一下URL编程和HTTP编程技术,看看这两种技术有什么特点,文中有详细的代码讲解,需要的朋友可以参考下
    2023-11-11
  • Java实现矩阵顺时针旋转90度的示例

    Java实现矩阵顺时针旋转90度的示例

    今天小编就为大家分享一篇Java实现矩阵顺时针旋转90度的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Java Web使用简单的批处理操作(记事本+Tomcat)

    Java Web使用简单的批处理操作(记事本+Tomcat)

    这篇文章主要介绍了Java Web使用简单的批处理操作 ,需要的朋友可以参考下
    2014-10-10
  • mybatis教程之延迟加载详解

    mybatis教程之延迟加载详解

    本篇文章主要介绍了mybatis教程之延迟加载详解。详细介绍了延迟加载的意义和用法实现,有兴趣的可以了解一下
    2017-05-05
  • java短信验证码获取次数限制实例

    java短信验证码获取次数限制实例

    这篇文章主要介绍了java短信验证码获取次数限制实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • 使用spring框架中的组件发送邮件功能说明

    使用spring框架中的组件发送邮件功能说明

    Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。这篇文章主要介绍了使用spring框架中的组件发送邮件,需要的朋友可以参考下
    2017-11-11

最新评论