2014-01-29 99 views
2

我知道我的標題很混亂。我很難總結我想問的問題。我的意思是有一種方法可以使用guice來注入實現接口A的類,使用綁定方法來實現,其中註釋位於實現接口A的類中,而不是在configure方法中綁定它,或者在接口A中添加@ImplementedBy註釋。註釋綁定實現guice中的接口的類

更新

當我讀到使用吉斯教程,以決定某一個類實現一個接口必須使用綁定。現在有很多方法來執行綁定。其中的實例是: 聯體結合:

bind(AInterface).to(Bclass); 

該代碼將位於延伸抽象模塊的類的配置方法。這告訴guice,如果它們是需要AInterface的依賴項,它可以注入BClass來處理依賴關係。

準時結合:

@ImplementedBy(BClass.class) 
public interface AInterface { 
} 

這個例子相當於鏈接綁定例子。

現在我讀到的所有綁定都要求我在配置方法或接口中聲明一個類實現該接口。這將要求我在每次實現接口時編輯現有代碼。我想要的只是實現接口的類處理綁定本身,以便不修改現有的代碼。

喜歡的東西

@Exports(AInterface.class) 
public BClass implements AInterface{ 
} 
+0

您能詳細說明一下嗎?也許張貼一些代碼示例顯示你想要做什麼(僞代碼或代碼將不會編譯會好起來,如果它顯示的意圖) –

+0

我已經更新了我的問題。我希望現在更清楚。 – MykelXIII

+0

我不認爲你可以這樣做,可以有很多'AInterface'的實現,以便註釋哪一個,如果兩個註釋,則會怎麼樣......此外,你的'BClass'應該明確實現'AInterface' – 2014-01-29 09:07:12

回答

0

有沒有辦法做到這一點。

正如RC在評論中指出的那樣,如果你有兩個類「@Exports」的界面相同,Guice不知道選哪一個。此外,從類加載的角度考慮:

  • 顯式綁定(不論linkeduntargeted)工作,因爲模塊明確提到每次結合類,它允許吉斯找到這些類。
  • JIT bindings工作,因爲他們要求他們落實到具體類,這也讓吉斯找到這些類。
  • @ImplementedBy註釋工作,因爲一旦類要求已被加載,它指向實施,所以Guice知道如何找到該類。

如果一個人寫一個@Exports註釋,吉斯將有效得已經爲了要認識到它提供AInterface儘管沒有明確提到BClass隨處可見BClass。雖然存在class-path scanning解決方案,但他們必須磨合類路徑中的每個類,這需要一些時間,並且對於Guice來說,這是一個危險的事情。因此,對於您要查找的情況,要求使用某種顯式綁定是最有意義的。

+0

http://stackoverflow.com/questions/6085200/how-to-get-all-implementors-subclasses-of-an-interface-with-guice/40558788# 40558788描述了一種模糊的相關方式,通過查看BClass可能會用來提供一些automagical,如上所述,IFF BClass已經與其他任何地方連接,從而可以自動檢測AInterface。 – vorburger

相關問題