<p>在spring中获取applicationContext.xml文件的时候可能需要用到classpath方式读取配置文件,在这谈谈classpath的两种方式的区别。
假如在我的src目录结构如下:
|- src
| |-com
| | |-applicationContext1.xml
| |-applicationContext2.xml
并且WEB-INF/lib目录下引入jar包 test.jar:
|- test.jar
| |-conf
| | |-applicationContext3.xml
| |-META-INF
获取方法:ApplicationContext ac = new ClassPathXmlApplicationContext(path);
1. 不使用classpath情况下:
path可以是完整的名称,如:"com/applicationContext1.xml" , "/applicationContext2.xml" , "conf/applicationContext3.xml"
path可以是含通配符的名称,如:"**/applicationContext*.xml" [指获取src目录及子目录下所有的以applicationContext开头的文件]
注意:完整的名称可以获取到任何位置的文件,含通配符的名称不能获取到jar包中的文件,也就是不能获取到applicationContext3.xml
2. 使用classpath:情况下,网上很多人说只能获取第一个文件,并且不能获取jar包中的文件,但我的实验结果是和不加classpath情况一样,在控制台信息中都只会打印出相对路径,不会打出绝对路径。
3. 使用classpath*:情况下,网上很多人说用这个就可以获取所有路径下的文件,包括jar包下的,但是我的实验结果是和classpath没什么区别,只是在控制台信息中会打印出绝对路径。
总结一下:
三种情况结果一样,区别在于两点:
1. 只是classpath*可以打印出绝对路径。
2. 含通配符的名称不能获取jar包下的文件。
以上是我在eclipse3.6_jee下的测试结果,不知道是不是因为我的配置有问题而导致classpath与classpath*没有区别。感觉理论上应该classpath*比classpath有用途。希望有高手可以指点一下,万分感谢</p>