Posted on 2014-05-02 15:48
ZT文萃 閱讀(550)
評論(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的起點開始尋找。
當然,如果覺得麻煩,你定位資源的時候全部都使用/開頭的方式就好了