1. 程式人生 > >Eclipse生成jar包後,Spring無法掃描到bean定義

Eclipse生成jar包後,Spring無法掃描到bean定義

無論包是在src中還是在jar中,其實根本的思路還是根據給的包域名(如:com.wang.vo.request.hotel.test)定位到包的資源物件。包在src中,我們可以把它當做檔案File來進行處理,因此在src中包是以資料夾的形式來體現的,但在jar中,包的含義是有些不同的,我們不能把它當做File來對待(這樣你或得到的是jar的File物件)。那麼怎麼才能獲取jar裡包的資源物件呢?

public static void main(String[] args) throws Exception {  
    String packageName = "com/wang/vo/request/hotel/test"
; URL url = Thread.currentThread().getContextClassLoader().getResource(packageName); if (url != null) { System.out.println(url.getPath()); } }

但是通過上述程式碼,執行後卻發現url始終為空,嘗試過各種獲取資源的辦法(如getResourceAsStream),均無法解決,我試了試其他的jar包(如spring的),卻發現相同的程式碼url卻有值。經過我反覆的測試和分析發現,問題出現在生成jar包的方式上,即所謂打jar包。
我們打包的步驟一般如下:
這裡寫圖片描述

這裡寫圖片描述

之後一直預設,然後Finish。這樣看似沒問題,但問題出現在這一步:
這裡寫圖片描述
這種預設方式生成的jar包中,只含有class檔案,而並沒有我們大眾所知的資料夾目錄結構。可能我們大多數人認為com.test.Student類,Student類檔案就應該在com資料夾下的test資料夾裡,這其實是片面的,是一個誤區!

com.test真正的含義是package包域名,就好比.net裡的名稱空間,它只是為了區分、彙總、唯一標識不同的類而提出的概念,跟資料夾目錄層次結構是兩回事,我們只是習慣上用資料夾目錄來展示package而已。但package卻不一定非要用過資料夾目錄來展示。