iteye_9831 2009-07-17 14:53 采纳率: 100%
浏览 554
已采纳

ClassLoader.getResources问题

今天在查看Spring的PathMatchingResourcePatternResolver类代码时,有调用到ClassLoader.getResources()方法,

忽然发现一直没弄清 ClassLoader.getResources() 在什么时候会返回多于1个URL?

能否举个简单的例子 谢谢!
[b]问题补充:[/b]
刚才试了一下,发现如果类路径上有重复的资源,getResource()方法会返回类路径上碰到的第一个资源。

而getResources()则会返回当前类加载器路径上的所有重复资源以及父类加载器上的所有重复资源。

比如,在tomcat\lib目录下放置一个zip文件,包含config/aaa.txt文件,
在WEB-INF/lib目录下复制一份这个zip文件,
再在src目录下放上config/aaa.txt文件,

getResource("config/aaa.txt")返回结果是:
file:/D:/eclipse/workspace/demo/WebContent/WEB-INF/classes/config/aaa.txt

getResources("config/aaa.txt")返回结果是:
file:/D:/eclipse/workspace/demo/WebContent/WEB-INF/classes/config/aaa.txt
jar:file:/D:/apache-tomcat-6.0.16/lib/aaaaa.jar!/config/aaa.txt
jar:file:/D:/eclipse/workspace/demo/WebContent/WEB-INF/lib/bbbbb.jar!/config/aaa.txt

  • 写回答

3条回答 默认 最新

  • wanghaolovezlq 2009-07-17 15:21
    关注

    看看它的源码

    public Enumeration<URL> getResources(String name) throws IOException {
    Enumeration[] tmp = new Enumeration[2];
    

    //先调用父类加载器加载资源
    if (parent != null) {
    tmp[0] = parent.getResources(name);
    } else {
    tmp[0] = getBootstrapResources(name);
    }
    //转到findResources方法,这个方法是让子类自己去实现的,也就是返回自定义的资源路径
    tmp[1] = findResources(name);

    return new CompoundEnumeration(tmp);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 路易威登官网 里边的参数逆向
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决
  • ¥15 processing提取音乐节奏