2014-02-14 27 views
0

因此,對於我的Java項目,我想要動態加載所有模塊而不需要手動幫助。Java自動從主包中的多個包加載類

根據我的包裝佈局,這已經證明很困難。 我不想將一個乾淨的包裝佈局中的200多個課程全部移動到一個包裝中,以允許反射完美地加載它們。

我想製作一個動態類加載器,它將查看指定包內的所有包,並獲取所有類,投射它們並加載它們。

我的包佈局就像這樣:

http://puu.sh/6VVih.png

我想通過[com.package.module.modules]找到所有其他的包,循環通過他們循環,讓所有類和它們轉換成我的基地,然後加載它們。

這段時間我很困難,而且我最近採取了一個非常...凌亂的方法。 (無取向)。

任何幫助將不勝感激。

+0

我的直覺是考慮使用java.util.ServiceLoader對象,儘管這可能取決於你的用例的更多細節。 – Caleryn

+0

介意提供一個解釋?對不起,這裏沒有細節。我很難自己解釋和理解整個情況。 – Lynxaa

回答

0

正如評論中最初所述,這可能取決於您的使用案例的更多細節。 可以使用服務加載器來加載類或接口的註冊實現。

例如

 Collection<YourInterface> collection = new ACollectionImplementation<>(); 
     for (final YourInterface object: ServiceLoader.load(YourInterface.class)) { 
       collection.add(object); 
     } 

登記的,應當在一個文件中完成,在META-INF /服務的YourInterface完全合格的類名。使用完全限定的名稱在單獨的行上列出每個實現。

上面將要求每個類都有一個默認的構造函數來初始化服務加載器。這通常用於創建工廠類,可以進一步擴展以構建其他對象。

谷歌「java服務加載器的例子」爲許多工作的例子。