Posted on 2014-05-02 15:48
ZT文萃 阅读(543)
评论(0) 编辑 收藏 所属分类:
中间件
Class的getResource方法,实际上是靠调入这个类的ClassLoader的getResource方法来实现的,如果调入这个类的ClassLoader是原生的BootStrap ClassLoader,这个ClassLoader是用C++写成的,在Java中没有相对应的物件。这时候的实现靠的是ClassLoader的静态方法getSystemResource。
只有当使用Class类的getResource方法的时候,才会有下面介绍的那种算法。
这种算法就是说,如果你指定的路径以/开头,那么就是从ClassPath的起点开始寻找这个路径。如果直接以某个名字开头,那么就是从当前包名的目录为起点开始寻找。
所以大家如果用过hibernate就知道,有些表示类到数据库表的映射关系的xml文件就和这个类的class文件放在一起,这样它就直接使用这个类.class.getResource方法来得到这个xml文件。
而在使用ClassLoader的getResource方法的时候,永远是以Classpath为直接起点开始寻找资源的。不用担心从什么包开始寻找的问题。
用Class.getResource不加/就是从当前包开始找,用ClassLoader.getResource不加/就是直接从Classpath的起点开始寻找。
当然,如果觉得麻烦,你定位资源的时候全部都使用/开头的方式就好了