zoukankan      html  css  js  c++  java
  • Spring Boot 2.0的属性绑定

    Spring Boot2.0的属性绑定

    原文
    从Spring boot第一个版本以来,我们可以使用@ConfigurationProperties注解将属性绑定到对象。也可以指定属性的各种不同格式。比如,person.first-name,person.firstName和PERSON_FIRSTNAME都可以使用。这个功能叫做“relaxed binding”。

    不幸的是,在spring boot 1.x,“relaxed binding”显得太随意了。从而使得很难来定义准确的绑定规则和指定使用的格式。在1.x的实现中,也很难对其进行修正。比如,在spring boot 1.x中,不能将属性绑定到java.util.Set对象。

    所以,在spring boot 2.0中,开始重构属性绑定的功能。我们添加了一些新的抽象类和一些全新的绑定API。在本篇文章中,我们会介绍其中一些新的类和接口,并介绍添加他们的原因,以及如何在自己的代码中如何使用他们。

    Property Sources

    如果你已经使用spring有一段时间,你应该对Environment比较熟悉了。这个接口继承了PropertyResolver,让你从一些PropertySource的实现解析属性。

    Spring Framework提供了一些常用的PropertySource,如系统属性,命令行属性,属性文件等。Spring Boot自动配置这些实现(比如加载application.properties)。

    Configuration Property Sources

    比起直接使用已存在的PropertySource实现类,Spring Boot2.0引入了新的ConfigurationPropertySource接口。我们引入这个新的接口来定义“relaxed binding”规则。

    该接口的主要API显得非常简单

    ConfigurationProperty getConfigurationProperty(ConfigurationPropertyName name);

    另外有个IterableConfigurationPropertySource变量实现了Iterable<ConfigurationPropertyNaame>,让你可以发现source包含的所有属性名称。

    你可以向下面这样将Environment传给ConfigurationPropertySources:

    Iterable<ConfigurationPropertySource> sources = ConfigurationPropertySources.get(environment);

    我们同时提供了MapConfigurationPropertySource来帮你应付上面的场景。

    Configuration Property Names

    如果规则明确,实现"relaxed binding"会简单很多。一直使用一致的格式,而不需要去关系在source中的各种无规则的格式。

    ConfigurationPropertyNames类来强制进行这些属性命名规则,例如“use lowercase kebab-case names”,在代码中使用person.first-name,在source中使用person.firstName或者PERSON_FIRSTNAME.

    Origin Support

    如期望的那样,ConfigurationPropertySource返回ConfigurationProperty对象,里面包含了属性的取值,另外有个可选的Origin对象。

    spring boot 2.0引入了新的接口Origin,能够指出属性取值的准确位置。其中TextResourceOrigin是较为常用的实现,会提供所加载的Resource,以及对应的行。

    对于.properties和.yml文件,我们写了定制的souce加载器,使得追踪成为可能。一些spring boot的功能进行了重写来追踪信息。比如,属性绑定的验证异常现在会显示:

  • 相关阅读:
    无法识别的USB设备:跟这台计算机连接的一个USB设备运行不正常,WINDOWS无法识别
    优化大师修复IE右键
    毕业了,醉得一塌糊涂
    [转]关于CAD绘图过程中“旋转(Rotate)”命令的参照方式用法
    MDS 7.0 使用中的问题
    推荐一个3D台球游戏
    [推荐]零件公差、偏差查询软件
    铁路用热轧钢轨的截面尺寸
    删除windows隐藏的本地连接
    (转)网页加速的14条优化法则
  • 原文地址:https://www.cnblogs.com/jpfss/p/11082701.html
Copyright © 2011-2022 走看看