classPath和classPath*的区别:
public static voidmain(String[] args) {
ApplicationContext ctx= new ClassPathXmlApplicationContext(
"classpath:conf/hibernate.cfg.xml");
System.out.println(ctx.getClassLoader().getResource("").getPath());
1) 当classpath: hibernate.cfg.xml时,找不到指定文件,因为classPath(D:\myeclipseWorkspace\mytest\WebRoot\WEB-INF\classes)下不存在该文件;
2) 当classpath:conf/hibernate.cfg.xml时,加载的为conf下面的hibernate.cfg.xml。
3) 将conf和conf.admin打包成jar包,当该jar包和conf、conf.admin同时存在且classpath:conf/hibernate.cfg.xml时,只加载conf下面的hibernate.cfg.xml,而不会加载jar包中的hibernate.cfg.xml。
4) 当只存在该jar包时,则加载jar包中的hibernate.cfg.xml。
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"classpath*:conf/**/*hibernate.cfg.xml");
//System.out.println(ctx.getClassLoader().getResource("conf/hibernate.cfg.xml").getPath());
try {
EnumerationresourceUrls = ctx.getClassLoader().getResources("conf/admin/admin-hibernate.cfg.xml");
while(resourceUrls.hasMoreElements()) {
String url =resourceUrls.nextElement().toString();
System.out.println(url);
}
} catch(IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
5) 当"classpath*:conf/**/*hibernate.cfg.xml"时,不仅会加载conf下的hibernate.cfg.xml和conf.admin下的admin-hibernate.cfg.xml,还会加载jar包下的这两个文件。
Classpath*的存在主要是为加载不同jar包同路径下的各个同名文件,例如myjar1.jar包里conf下的hibernate.cfg.xml和myjar2.jar包里conf下的hibernate.cfg.xml。
PS:还可参考http://www.cnblogs.com/shipengzhi/articles/3029872.html