我是靠谱客的博主 寂寞菠萝,最近开发中收集的这篇文章主要介绍Spring之ResourceLoader,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Spring作为java开发首选的框架,功能真的是非常之多,开个新系列来挨个看看这些功能

今天主要来看看ResourceLoader,顾名思义是做资源加载用的

package org.springframework.core.io;

import org.springframework.lang.Nullable;
import org.springframework.util.ResourceUtils;


public interface ResourceLoader {

	/** 加载classpath资源时的伪前缀classpath: */
	String CLASSPATH_URL_PREFIX = ResourceUtils.CLASSPATH_URL_PREFIX;


	/**
	 * 获取资源
	 */
	Resource getResource(String location);

	/**
	 * 获取类加载器
	 */
	@Nullable
	ClassLoader getClassLoader();

}

位于springframework.core.io包下。说明这是一个io操作相关的接口

他有一个默认实现DefaultResourceLoader,通过这个类javadoc得知DefaultResourceLoader可以加载3种资源:

  1. 文件系统资源
  2. classpath
  3. URI网络资源

一个简单的demo

public static void main(String[] args) {
        ResourceLoader resourceLoader = new DefaultResourceLoader();
        final String location = "/Users/xxxxxx.json";
        final Resource fileResource = resourceLoader.getResource("file:" + location);
        System.out.println("资源是否存在:" + fileResource.exists());
        //resourceLoader操作文件等同于下面的file操作。resourceLoader会将location截取出争取的path然后给到File对象
        File file = new File(location);
        System.out.println("资源是否存在:" + file.exists());
        final Resource uriResource = resourceLoader.getResource("http://pubimage.360doc.com/NewArticle/gzh3.jpg");
        System.out.println("资源是否存在:" + uriResource.exists());
        final Resource classPathResource = resourceLoader.getResource(ResourceUtils.CLASSPATH_URL_PREFIX + "bootstrap.yml");
        System.out.println("资源是否存在:" + classPathResource.exists());
    }

 

可以看到它是通过getResource的入参location的前缀来判断资源类型的

如果这里你有一些对资源抽象的需求,比如导入一张报表,有可能是OSS下载的也可能是本地上传的。那么可以尝试使用此方法对资源进行抽象统一处理,还是不错的。

到这还没完,哈哈,在DefaultResourceLoader中有这么一个属性和方法

	private final Set<ProtocolResolver> protocolResolvers = new LinkedHashSet<>(4);

    /**
	 * Register the given resolver with this resource loader, allowing for
	 * additional protocols to be handled.
	 * <p>Any such resolver will be invoked ahead of this loader's standard
	 * resolution rules. It may therefore also override any default rules.
	 * @since 4.3
	 * @see #getProtocolResolvers()
	 */
	public void addProtocolResolver(ProtocolResolver resolver) {
		Assert.notNull(resolver, "ProtocolResolver must not be null");
		this.protocolResolvers.add(resolver);
	}

ProtocolResolver协议解析器接口,我们可以通过自定义协议解析器,然后注册到addProtocolResolver注册,那么就可以实现自定义的协议解析了。并且优先级高于默认提供的,所以可以用来覆盖默认行为。这个就很6啦,比如我需要读取多种文件类型,json、yml、xml等等,再读取时我要先做个校验,那么就可以通过注册我们自己的协议解析器来完成

最后

以上就是寂寞菠萝为你收集整理的Spring之ResourceLoader的全部内容,希望文章能够帮你解决Spring之ResourceLoader所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部