0 0

spring的ClassPathResource怎么知道具体的classpath指向的路径的10

如题,我的开发环境是windows的一个web应用,但是是在一个main方法中直接加载配置文件

具体代码片段:
ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:study/event/applicationContext-event.xml");

spring怎么知道classpath是哪个路径?

看了下ClassPathResource的源代码,在它的方法:
public InputStream getInputStream() throws IOException {
InputStream is = null;
if (this.clazz != null) {
is = this.clazz.getResourceAsStream(this.path);
}
else {
is = this.classLoader.getResourceAsStream(this.path);
}
if (is == null) {
throw new FileNotFoundException(
getDescription() + " cannot be opened because it does not exist");
}
return is;
}

里,程序运行到这里的时候this.path显示的是:study/event/applicationContext-event.xml,所以不知道spring是怎么知道去正确的路径查找资源(study/event/applicationContext-event.xml)的

问题补充:
我很想知道spring是怎么知道classpath是哪个的?也就是说它是在什么地方确定了classpath目录的路径的?
问题补充:
但是我系统都没有定义那个classpath。
问题补充:
java.class.path这个系统属性是什么时候定义的呢?因为我自己是没定义的,所以我认为是不是:

1 如果是在IDE里面跑java程序,那么又IDE定义这个变量

2 如果是在服务器里面运行java程序,那么由服务器定义

是这样的吗?
2009年6月11日 14:43

6个答案 按时间排序 按投票排序

0 0

采纳的答案

这个是JVM初始化的

http://hi.baidu.com/fendy520/blog/item/01fd76d96d79252411df9bbb.html

2009年6月11日 17:47
0 0

spring也是用的jdk的查找类路径方法啊

if (this.clazz != null) {
is = this.clazz.getResourceAsStream(this.path);
//调用Class类的getResourceAsStream
}
else {
is = this.classLoader.getResourceAsStream(this.path);
//调用ClassLoader类的getResourceAsStream
}

Class类的getResourceAsStream
public InputStream getResourceAsStream(String name)查找具有给定名称的资源。查找与给定类相关的资源的规则是通过定义类的 class loader 实现的。此方法委托此对象的类加载器。如果此对象通过引导类加载器加载,则此方法将委托给 ClassLoader.getSystemResourceAsStream(java.lang.String)。
在委托前,使用下面的算法从给定的资源名构造一个绝对资源名:

如果 name 以 '/' 开始 ('\u002f'),则绝对资源名是 '/' 后面的 name 的一部分。
否则,绝对名具有以下形式:
   modified_package_name/name
其中 modified_package_name 是此对象的包名,该名用 '/' 取代了 '.' ('\u002e')。


参数:
name - 所需资源的名称
返回:
一个 InputStream 对象,或者 null(如果找不到带有该名称的资源)
抛出:
NullPointerException - 如果 name 是 null

2009年6月11日 17:21
0 0

System.getProperty("java.class.path")

你打出来看看就知道了

2009年6月11日 16:10
0 0

编译生成class文件的classes目录下的相对目录
或者
classpath环境变量里定义的路径

这两者都可以

2009年6月11日 15:46
0 0

我觉得classpath只是一个表示符,
值应该是从system java.class.path里面取得的

2009年6月11日 15:25
0 0

classpath 指你当前目录
相当于src下

2009年6月11日 14:54

相关推荐

Global site tag (gtag.js) - Google Analytics