spring-core组件详解——PropertyResolver属性解决器

 更新时间:2016年05月06日 11:02:57   作者:拉风小野驴   我要评论

这篇文章主要介绍了spring-core组件详解——PropertyResolver属性解决器,需要的朋友可以参考下

PropertyResolver属性解决器,主要具有两个功能:

通过propertyName属性名获取与之对应的propertValue属性值(getProperty)。

把${propertyName:defaultValue}格式的属性占位符,替换为实际的值(resolvePlaceholders)。

注意:getProperty获取的属性值,全都是调用resolvePlaceholders进行占位符替换后的值。

组件体系图如下:

PropertyResolver接口:
该接口定义了组件所具有的所有功能。其一是通过key获取对应的value,当获取不到value时,有3种选择:返回null值、使用指定的默认值或者抛出一个非法状态异常。获取到的value值默认是String类型,当然也可以认为指定一种类型,这依赖于ConversionService进行类型转换。
另外还有一个问题:属性值中可以包含${}格式的占位符,因此,接口添加了另一个功能就是替换属性值中的占位符(注意:属性名是不允许存在占位符的,就算存在,组件也不会当作占位符进行替换)。当占位符无法替换时,也有2种选择:保持原样或者抛出一个非法参数异常。具体接口如下:

ConfigurablePropertyResolver接口:
该接口定义了如何对组件本身进行配置。如:刚刚提到获取value时可以指定任意类型,这依赖于ConversionService进行类型转换,当前接口就提供了对ConversionService的设置和获取。另外,可以配置属性占位符的格式,包括:占位符前缀(默认为"${")、占位符后缀(默认为"}")、占位符值分隔符(默认为":",用于分隔propertyName和defaultValue)。组件还可以设置哪些属性是必须存在的,还可以校验必须存在的属性是否真的存在(不存在的话会抛出异常)。具体接口如下:

AbstractPropertyResolver类:
上述两个接口的抽象实现类。它实现了ConfigurablePropertyResolver接口的所有方法。关于PropertyResolver接口方法,还有3个getProperty方法需要子类实现(其他重载方法均调用这3个方法):

String getProperty(String key);
<T> T getProperty(String key, Class<T> targetType);
<T> Class<T> getPropertyAsClass(String key, Class<T> targetType);
/**
* 当前类还额外定义了一个抽象方法,用于直接返回获取到的value值(不进行占位符替换)。
* 一般的getProperty方法默认都会替换掉value值中的占位符后返回。
*/
protected abstract String getPropertyAsRawString(String key);
至于替换属性占位符,则借助2个PropertyPlaceholderHelper属性占位符助手(工具类)对象完成,
这2个对象一个为严格模式,一个为非严格模式。

PropertySourcesPropertyResolver类:
该类是体系中唯一的完整实现类。它以PropertySources属性源集合(内部持有属性源列表List<PropertySource>)为属性值的来源,按序遍历每个PropertySource,获取到一个非null的属性值则返回。

相关文章

  • Java开发之request对象常用方法整理

    Java开发之request对象常用方法整理

    这篇文章主要介绍了 Java开发之request对象常用方法整理的相关资料,需要的朋友可以参考下
    2017-02-02
  • Java中的collection集合类型总结

    Java中的collection集合类型总结

    Java的集合类型都是对java.util包中Collection接口的继承,这里我们主要介绍依赖于collection的一些主分支,一起来看一下Java中的collection集合类型总结
    2016-05-05
  • Java 操作Properties配置文件详解

    Java 操作Properties配置文件详解

    本篇文章主要介绍了Java 操作Properties配置文件详解,详细的介绍了Properties和主要方法,有兴趣的可以了解下
    2017-05-05
  • 浅谈Java堆外内存之突破JVM枷锁

    浅谈Java堆外内存之突破JVM枷锁

    这篇文章主要介绍了浅谈Java堆外内存之突破JVM枷锁,涉及jvm内存分配,jvm垃圾回收,堆外内存的垃圾回收等相关内容,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Java中的clone方法详解_动力节点Java学院整理

    Java中的clone方法详解_动力节点Java学院整理

    clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。下面通过本文给大家介绍java中的clone方法,感兴趣的朋友一起看看吧
    2017-06-06
  • Java集合List与Array的相互转换

    Java集合List与Array的相互转换

    本篇文章主要介绍了Java集合List与Array的相互转换,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • java数据类型与二进制详细介绍

    java数据类型与二进制详细介绍

    这篇文章主要介绍了java数据类型与二进制详细介绍的相关资料,这里对数据类型进行了一一介绍分析,并说明自动转换和强制转换,需要的朋友可以参考下
    2017-07-07
  • Java使用观察者模式实现气象局高温预警功能示例

    Java使用观察者模式实现气象局高温预警功能示例

    这篇文章主要介绍了Java使用观察者模式实现气象局高温预警功能,结合完整实例形式分析了java观察者模式实现气象局高温预警的相关接口定义、使用、功能操作技巧,并总结了其设计原则与适用场合,具有一定参考借鉴价值,需要的朋友可以参考下
    2018-04-04
  • Java中避免写嵌套if样式的代码详解

    Java中避免写嵌套if样式的代码详解

    这篇文章主要给大家介绍了在Java中如何避免写嵌套if样式的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来学习学习吧。
    2017-07-07
  • 基于Hadoop实现Knn算法

    基于Hadoop实现Knn算法

    这篇文章主要为大家详细 介绍了基于Hadoop实现Knn算法的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12

最新评论