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访问本地系统资源等
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/q2780004063/article/details/109461398
内容来源于网络,如有侵权,请联系作者删除!