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实现图片写入高清字体及带边框的方法

    java实现图片写入高清字体及带边框的方法

    这篇文章主要介绍了java实现图片写入高清字体及带边框的方法,涉及java针对图片及文字的相关操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • es(elasticsearch)整合SpringCloud(SpringBoot)搭建教程详解

    es(elasticsearch)整合SpringCloud(SpringBoot)搭建教程详解

    这篇文章主要介绍了es(elasticsearch)整合SpringCloud(SpringBoot)搭建教程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • SpringBoot中动态数据源配置与使用详解

    SpringBoot中动态数据源配置与使用详解

    在现代应用中,处理多数据源是常见的需求,在 Spring Boot 中,这样的需求可以通过动态数据源来轻松实现,本篇博客将详细介绍如何在 Spring Boot 中配置和使用动态数据源,并演示如何切换到指定的数据源,需要的朋友可以参考下
    2024-10-10
  • Java实战之医院管理系统的实现

    Java实战之医院管理系统的实现

    这篇文章主要介绍了如何利用Java实现医院管理系统,文中用到的技术有:SpringBoot、Layui、Freemaker等,感兴趣的同学可以了解一下
    2022-04-04
  • SpringBoot整合jasypt进行重要数据加密的操作代码

    SpringBoot整合jasypt进行重要数据加密的操作代码

    Jasypt(Java Simplified Encryption)是一个专注于简化Java加密操作的开源工具,它提供了一种简单而强大的方式来处理数据的加密和解密,使开发者能够轻松地保护应用程序中的敏感信息,本文给大家介绍了SpringBoot整合jasypt进行重要数据加密,需要的朋友可以参考下
    2024-05-05
  • java中Cookie被禁用后Session追踪问题

    java中Cookie被禁用后Session追踪问题

    这篇文章主要介绍了Java中Cookie被禁用后Session追踪问题,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-03-03
  • Java中Iterator迭代器的使用详解

    Java中Iterator迭代器的使用详解

    在程序开发中,经常需要遍历集合中的所有元素。针对这种需求,JDK专门提供了一个接口java.util.Iterator。本文就来详细说说Iterator迭代器的使用,感兴趣的可以了解一下
    2022-10-10
  • Java Durid进行JDBC连接详解

    Java Durid进行JDBC连接详解

    今天给大家带来的是关于Java的相关知识,文章简单使用Durid进行JDBC连接,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-09-09
  • Spring管理Controller可行性原理示例分析

    Spring管理Controller可行性原理示例分析

    这篇文章主要为大家介绍了Spring管理Controller可行性原理示例分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Java Base64 加密与解密示例代码

    Java Base64 加密与解密示例代码

    基本的加密尽量保持简单,加密输入字符串没有增加任何换行符。输出被映射到“A-Za-z0-9+/”字符集中,解密从该字符集中解析为任意字符,这篇文章主要介绍了Java Base64 加密与解密,需要的朋友可以参考下
    2022-12-12

最新评论