官方描述:http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html
這里指出了jar包的典型的目錄結構。簡單翻譯:
META-INF目錄中的下列文件和目錄獲得Java 2平臺的認可與解釋,用來配置應用程序、擴展程序、類加載器和服務:
• MANIFEST.MF:清單文件,用來定義與擴展和數據包相關的數據。
• INDEX.LIST:這個文件由JAR工具的新“-i”選項生成,其中包含在一個應用程序或擴展中定義的數據包的地址信息。它是JarIndex的一部分,被類加載器用來加速類加載過程。
• x.SF:JAR文件的簽名文件。x代表基礎文件名。
• x.DSA:這個簽名塊文件與同名基礎簽名文件有關。此文件存儲對應簽名文件的數字簽名。
• services/:這個目錄存儲所有服務提供程序配置文件。
介紹:
在META-INF/services目錄下保存的是service provider的配置文件。 服務在應用中會是一個接口(更多的是抽象類)。
一個類服務器提供者實現了一個服務類。這類的服務提供類可以以擴展的形式發布到平臺上。所以,jar文件引入了擴展目錄,同樣你也可以將服務提供者加入classpath提供訪問。
服務都是表現為一個積累,而一個服務提供者通常是集成或實現了服務定義類。服務提供類通常不會像代理類一樣為了正常提供服務而包含了請求者的許多信息。服務提供類一般傾向于高集成。
對這類服務提供類的唯一強制性要求就是必須有一個無參的構造函數。
provider 配置文件
META-INF/services目錄作為provider配置文件的存放路徑。provider配置文件中必須是全類名(包含package)。配置文件可以存在space tab 換行等字符,#作為注釋。
注意:provider配置文件必須是以UTF-8編碼。
總結:
service provider機制為程序的動態擴展提供了契機,在應用中你可以針對接口編程,通過RTTI技術可以比較完美的解決程序之間的耦合性。相比于spring DIP機制,這也是一個不錯的嘗試,至少它不需要耦合spring包。
Blog :
http://agapple.javaeye.com/ 歡迎訪問