本文介绍Spring框架如何解析外部资源文件,仅参考官方文档《第7章 Resources》。
***************************以下是正文的部分***************************
通过Spring框架提供的对象可以获取诸如Http,Ftp,File,InputStream,ByteArray等形式的外部资源。总体来说,这些对象都继承自ApplicationContext接口。包括为了初始化Spring容器常用的ClassPathXmlApplicationContext和AnnotationConfigApplicationContext对象。下面通过代码举例:
一、通过URL地址获取XML配置文件
package resources.loader; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class ResourceLoader {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("http://localhost:8080/Demo/lazyConfig.xml");
for(String beanName : ctx.getBeanDefinitionNames()){
System.out.println(beanName);
}
}
}
使用http:前缀
二、获取本地资源文件
(1)获取classpath目录下的资源文件
package resources.loader; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext; public class ResourceLoader {
public static void main(String[] args) {
ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:appConfig.xml");
for(String beanName : ctx.getBeanDefinitionNames()){
System.out.println(beanName);
}
}
}
使用classpath:前缀
(2)获取任意目录下的资源文件
package resources.loader; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext; public class ResourceLoader {
public static void main(String[] args) {
//使用绝对路径作为参数可以解析任何路径下的资源文件
ApplicationContext ctx = new FileSystemXmlApplicationContext("file:/.../lazyConfig.xml");
for(String beanName : ctx.getBeanDefinitionNames()){
System.out.println(beanName);
}
}
}
使用绝对路径
(3)获取classpath以及子目录下的资源文件
ApplicationContext ctx =
new ClassPathXmlApplicationContext("classpath*:conf/appContext.xml");
使用classpath*前缀
通常获取用来配置Spring容器的XML文件只会使用ClassPathXmlApplicationContext对象,上面的例子只是为了说明ApplicationContext接口还有其它实现。开发中并不会这样使用。
其实这篇文稿之前就写好了,但是一直没有发表。原因是对于这部分的知识,我仅仅是翻译了文档而已,实际应用中并无使用过。但是后来有看过的朋友说还是应该发表出来,原因是他们觉得对于这部分的内容,对于不想阅读英文的朋友从学习Spring的角度上出发还是有些帮助的。特此感谢他们。