2016-05-31 32 views
2

我喜歡dagger2很多,並且想在我的新項目中使用它。唯一的問題是Dagger2,我們仍然需要編寫一些樣板代碼,以及CDI缺失的支持。
由於Google正在開發和維護dagger2並將其用於他們的Android開發,我想知道他們是否想用dagger2替換Guice中的DI實現,這是我的第一個問題。
如果是的話,那麼我可以開始使用guice,期待在將來的更新中我會得到匕首的好處。
但是,如果他們不是,有沒有一種方法可以在同一個項目中使用,其中guice可以限制爲CDI。是否有任何普通的代替guice中的DI實現與dagger2

回答

2

我不是匕首專家,但我會盡量回答你的問題...(我希望把它做好)

我,如果他們正在考慮更換DI的疑惑在Guice中用dagger2實現,

不是。沒有很好的理由去做。 Dagger和Guice提出了完全不同的依賴注入概念。前者使用代碼生成,後者是運行時反射。

(...)有沒有一種方法可以在同一個項目中將guice限制爲CDI?

我不認爲在同一個項目中混合CDI,Dagger和Guice是一個好主意。除此之外,CDI只是一個規範,而不是像Weld或OpenWebBeans這樣的實際實現 - 所以我想你想說「DI」?
總之:有dagger-adapter extension允許使用Dagger2模塊,吉斯(使用DaggerAdapter),如果你真的想用匕首吉斯4.


混合順便說一句,我想給你的一個想法是什麼匕首是和它永遠不會是。下面是從基督教格魯伯(誰在匕首的工作),在這個問題上報價:

吉斯總會有相比,匕首功能的超集,雖然我們做的服務器上,並在待機使用匕首有項目 - 單獨的java應用程序。但是Dagger並不像Guice那樣圍繞周圍的「腳手架」代碼(servlet支持等)發展,並且不會持續相當長的一段時間。此外,有些團隊需要或想要一些先進的Guice功能,這些功能永遠不會使用Dagger。

您可能會問這些「高級功能」是什麼?它是例如AOP支持,如攔截方法,這對於許多開發人員來說可能是至關重要的。

您可以閱讀可用的全部討論(2014年2月)here

+0

沒有很好的理由去做。 ---更好的性能,更清晰的堆棧跟蹤是我能想到的幾個理由。 所以我想你想說的是「DI ---其實我的意思是完全沒有鍋爐板的DI支持,當我提到CDI時,我主要是提到容器生命週期支持 – Gomsy

+0

我認爲我們應該總是將工具選擇調整爲我們的要求你說'性能更好' - 但你的應​​用真的需要額外的幾毫秒嗎?(它可能發生在Android上,但在服務器端?)總結:**恕我直言,我認爲這是很好的在兩個這樣的好工具中有一個選擇,而且我沒有看到有什麼理由用'dagger2'替換Guice中的DI實現。 –

+0

可能你誤會了我。絕不意味着我在暗示或期望Dagger2將取代Guice,它們都是優秀的工具,可能適用於不同類型的應用程序,我的意思是替換Guice的下劃線DI實現,它基於昂貴的反射以及替換它使用Dagger2中的編譯時代碼生成,它可以變得更快。 – Gomsy

0

作爲一個從事Google的Java應用程序框架開發工作的人,我可以向您保證,Google有大量重要的項目都是使用Guice和Dagger構建的,並且這兩個DI系統將在可預見的將來繼續使用和開發。

我個人的想法(這是不是一個正式的谷歌計劃或聲明)是,隨着時間的推移,我們將建立在匕首的頂部更強大的抽象(可能在附加框架和/或庫),以便匕首繼續適用於越來越大的應用程序,更加強大的Guice工具,使Guice開發人員的體驗與Dagger開發人員的體驗變得越來越可比,至少對於Guice應用程序的一個子集「正常」的事情。

Dagger和Guice都是有用的工具,每個工具都有不同的權衡和不同的目標受衆。在同一個項目中使用兩者應該是可能的,儘管這不是一個理想的解決方案,因爲那樣你就無法充分利用其中任何一個的優勢。但更好的互操作性是一個目標,Guice和Dagger團隊定期就如何標準化和協調工作進行溝通。

相關問題