Spring中PropertiesLoaderSupport源码简介说明

欣喜 Spring 发布时间:2024-11-28 16:55:29 阅读数:8246 1
下文笔者讲述PropertiesLoaderSupport源码简介说明,如下所示

PropertiesLoaderSupport简介说明

Spring中PropertiesLoaderSupport是一个抽象基类
 此抽象类供其他子类使用
===============================================
PropertiesLoaderSupport实现子类有PropertiesFactoryBean,PropertyResourceConfigurer

PropertiesLoaderSupport

PropertiesLoaderSupport位于包 org.springframework.core.io.support 中
 
PropertiesLoaderSupport中相关属性
   // 本地属性,通过设置Properties对象直接设置进来的属性
    @Nullable
	protected Properties[] localProperties;

    // 本地属性和外来属性之间的优先级,或者叫做覆盖关系
    // false 表示 外来属性优先级高于本地属性  (缺省值)
    // true 表示 本地属性优先级高于外来属性   
	protected boolean localOverride = false;

    // 外来属性对应资源,通过设置外部资源位置设置进来需要加载的属性
	@Nullable
	private Resource[] locations;

    // 读取外来属性时遇到不存在的资源路径应该怎么办 ?
    // false : 输出一个日志,然后继续执行其他逻辑 (缺省值)
    // true : 抛出异常
	private boolean ignoreResourceNotFound = false;

    // 加载外来属性资源文件时使用的字符集
	@Nullable
	private String fileEncoding;

    // 外来属性加载工具
	private PropertiesPersister propertiesPersister = new DefaultPropertiesPersister();

mergeProperties

	 * Return a merged Properties instance containing both the
	 * loaded properties and properties set on this FactoryBean.
     *    
	 */
	protected Properties mergeProperties() throws IOException {
		Properties result = new Properties();

		if (this.localOverride) {
			// Load properties from file upfront, to let local properties override.
          // localOverride == true, 先加载外来属性到结果对象
			loadProperties(result);
		}

		if (this.localProperties != null) {
            // 将本地属性合并到结果对象
			for (Properties localProp : this.localProperties) {
				CollectionUtils.mergePropertiesIntoMap(localProp, result);
			}
		}

		if (!this.localOverride) {
			// Load properties from file afterwards, to let those properties override.
           // localOverride == false, 后加载外来属性到结果对象
			loadProperties(result);
		}

		return result;
	}

loadProperties方法

 
	/**
	 * Load properties into the given instance.
	 * @param props the Properties instance to load into
	 * @throws IOException in case of I/O errors
	 * @see #setLocations
	 */
	protected void loadProperties(Properties props) throws IOException {
		if (this.locations != null) {
           // 读取每一个属性文件资源
			for (Resource location : this.locations) {
				if (logger.isTraceEnabled()) {
					logger.trace("Loading properties file from " + location);
				}
				try {
                // 使用指定的字符集fileEncoding从外部资源路径location读取属性到props,使用的属性读取工具
                // 是 propertiesPersister
					PropertiesLoaderUtils.fillProperties(
							props, new EncodedResource(location, this.fileEncoding), this.propertiesPersister);
				}
				catch (FileNotFoundException | UnknownHostException ex) {
                // 出现异常时,如果ignoreResourceNotFound==true,则仅仅记录日志,继续读取下一个
                // 资源文件,否则直接抛出该异常
					if (this.ignoreResourceNotFound) {
						if (logger.isDebugEnabled()) {
							logger.debug("Properties resource not found: " + ex.getMessage());
						}
					}
					else {
						throw ex;
					}
				}
			}
		}
	}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/Spring/202411/8194.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者