戴着假发的程序员出品 抖音ID:戴着假发的程序员 欢迎关注
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访问本地系统资源等