classPath和classPath*的区别

来源:互联网 发布:vs2017写c语言 编辑:程序博客网 时间:2024/04/30 21:51

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.xmlmyjar2.jar包里conf下的hibernate.cfg.xml

PS:还可参考http://www.cnblogs.com/shipengzhi/articles/3029872.html

0 0