网站建设资讯

NEWS

网站建设资讯

SpringBoot环境属性占位符解析及类型转换详解-创新互联

前提

创新互联服务项目包括站前网站建设、站前网站制作、站前网页制作以及站前网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,站前网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到站前省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

前面写过一篇关于Environment属性加载的源码分析和扩展,里面提到属性的占位符解析和类型转换是相对复杂的,这篇文章就是要分析和解读这两个复杂的问题。关于这两个问题,选用一个比较复杂的参数处理方法PropertySourcesPropertyResolver#getProperty,解析占位符的时候依赖到

PropertySourcesPropertyResolver#getPropertyAsRawString:

protected String getPropertyAsRawString(String key) {
 return getProperty(key, String.class, false);
}

protected  T getProperty(String key, Class targetValueType, boolean resolveNestedPlaceholders) {
 if (this.propertySources != null) {
  for (PropertySource<?> propertySource : this.propertySources) {
   if (logger.isTraceEnabled()) {
    logger.trace("Searching for key '" + key + "' in PropertySource '" +
       propertySource.getName() + "'");
   }
   Object value = propertySource.getProperty(key);
   if (value != null) {
    if (resolveNestedPlaceholders && value instanceof String) {
     //解析带有占位符的属性
     value = resolveNestedPlaceholders((String) value);
    }
    logKeyFound(key, propertySource, value);
    //需要时转换属性的类型
    return convertValueIfNecessary(value, targetValueType);
   }
  }
 }
 if (logger.isDebugEnabled()) {
  logger.debug("Could not find key '" + key + "' in any property source");
 }
 return null;
}

文章标题:SpringBoot环境属性占位符解析及类型转换详解-创新互联
网页链接:http://njwzjz.com/article/dcicgi.html