Spring应用手册-ResourceLoader接口

x33g5p2x  于2021-09-26 转载在 Spring  
字(1.3k)|赞(0)|评价(0)|浏览(456)

ResourceLoader接口

spring应用手册(第五部分)

上一章节,我们解释了Resource接口。现在我们来看看ResourceLoader。

Spring框架为了更方便的获取资源,尽量弱化程序员对各个Resource接口实现类的感知与分辨,降低学习与使用成本,定义了另一个接口,就是:ResourceLoader接口。
package org.springframework.core.io;

public interface ResourceLoader {
    String CLASSPATH_URL_PREFIX = "classpath:";
	//根据s返回对应的Resource对象
    Resource getResource(String s);
	//返回当前可用的Classloader对象
    @Nullable
    ClassLoader getClassLoader();
}

我们常使用的ApplicationContext就实现了ResourceLoader接口。所以其实我们可以通过我们自己创建Application对象直接加载资源,而且我们不需要具体的底层实现,看一个案例:

@Test
public void testResourLoader(){
    ApplicationContext ac =
            new ClassPathXmlApplicationContext();
    Resource resource = ac.getResource("applicationContext-demo9.xml");
    System.out.println(resource.getFilename());
}

其实用过spring的朋友都会发现,我们几乎没怎么使用过这个ResourceLoader。其实主要是因为我们创建了ApplicationContext对象,这个对象在内部会自己使用ResourceLoader进行资源加载,那么问题是不同的资源应该怎么加载呢?

我们上一章节提到Resource有6中具体实现,那么这个6中具体实现是否有不同的加载方法? 那是自然的,但是我们不需要关心细节,我们只要按下面的方式操作:

如果用ClassPathXmlApplicationContext启动的Spring容器,则底层Resource是ClassPathResource实例
如果用FileSystemXmlApplicationContext启动的Spring容器,则底层Resource是FileSystemResource实例 
如果用XmlWebApplicationContext启动的Spring容器,则底层Resource是ServletContextResource实例

当然我们也可以通过资源的前缀来指定使用的Resource的实例:

例如前缀"classpath:"是指定使用ClassPathResource;前缀"file:"则指定使用UrlResource访问本地系统资源等

相关文章