我有兩個maven項目,說MvnSpring和MvnGuice.MvnSpring正在研究春季和冬眠框架的作品。 MvnGuice正在研究谷歌guice和mybatis。我需要將這兩個功能結合在一起。 兩者都遵循單例模式。編碼時我需要在MvnGuice中獲得一些MvnSpring。爲此,我創建了一個MvnSpring的jar,並將其放入.m2存儲庫,並在MvnGuice中提供依賴關係詳細信息。現在我可以在MvnGuice類中導入MvnSpring類.MvnSpring使用spring依賴注入,MvnGuice使用guice依賴注入來創建對象。現在在MvnSpring流程中是MSserviceImpl(實現MSservice)> MSdaoImpl(實現MSdao)。現在我需要從MvnGuice中調用MSService類。然後在運行時顯示錯誤,如MSService類爲null。然後我在MvnGuice中爲MSService類做了一個guice依賴注入。現在控件到達MSserviceImpl,但現在MSdao在這裏爲null。是否有可能與MvnGuice一起啓動MvnSpring。我希望我能解決這個問題。在兩個框架上結合兩個基於maven的項目
回答
雖然Spring和Guice針對同一個問題IoC,但他們採用完全不同的方法來解決它。它們在功能和配置方式上有所不同,Spring有bean定義,Guice使用綁定。
幸運的是,它們有共同的理由,它們都支持JSR-330這一定義了一組註釋的標準規範。這使您能夠編寫單例並描述他們需要的注入,而不依賴於Spring或Guice。
這樣,無論您在特定項目中使用的框架如何,您都可以在項目之間共享您的單身人士。我不會推薦在同一個項目中同時使用Guice和Spring,除非它們之間有明確的分隔。例如,你可以使用Guice作爲Spring代碼通過定義的API使用的模塊,它隱藏了它在內部基於Guice的事實。
已經提到過JSR-330。 對於某些情況下,它可能是不夠的,比如,你有代碼:
final String className = config.getProperty(«serviceImpl»);
// Class.forName(name) and check required interface for type safety
final Class<? extends Service> serviceClass = Reflection.classForName(className, Service.class);
final Service service = injector.getInstance(serviceClass);
在不同的DI環境中,您都應該支持com.guice.inject.Injector.getInstance()和org.springframework.context .ApplicationContext.getBean()實現。
有草案解決方案sdif4j簡單的依賴注入門面。 這個項目的想法是封裝不同的DI框架邏輯與自己的抽象,以擴展默認的JSR-330的可能性。請注意,目前還沒有公開發布,但您可以找到如何解決問題或在分支中進行內部發布的想法。 一般問題是,你的MvnSpring和MvnGuice項目都應該基於JSR-330(而不是guice/spring註釋)和org.sdif4j:sdif4j-api(或者你自己的抽象;只有需要注入器功能)。建議使guice和spring依賴可選(編譯但不導出)以允許庫客戶端自己選擇DI。 在您的MvnCompineGuiceAndSpring中,您只需聲明sdif4j-guice或sdif4j-spring依賴項(它類似於slf4j的用法)並配置您的DI環境。您可以在測試子項目中找到不同的示例。
更多注意事項: Spring的默認範圍是singleton,Guice - prototype(Spring術語)。所以,如果你想有一個原型的bean,你可以使用:
@org.springframework.context.annotation.Scope("prototype")
@javax.inject.Named
public class TestPrototype {
}
Spring的@Scope註解應該由吉斯即使彈簧不會出現在你的classpath被忽略。 還必須聲明你的所有辛格爾頓豆@ javax.inject.Named和@ javax.inject.Singleton註解支持Spring和吉斯,像這樣:
@javax.inject.Named
@javax.inject.Singleton
public class TestSingleton implements ITestSingleton {
public TestSingleton() {
}
}
與@Scope註解,你可以在你的代碼中使用@ImplementedBy(@ProvidedBy)guice註釋(在可行的情況下;小心使用它,通常這不是一個好習慣),這在Spring DI中也應該被忽略(在這兩種情況下,如果Spring存在於classpath中)。
希望,很明顯。
- 1. 合併兩個Maven項目?
- 2. 在Eclipse中結合兩個Java項目
- 3. 兩個框架jQuery和Prototype在一個項目上。
- 4. 基於兩個項目的類型和
- 5. 發揮框架Crud和兩個項目
- 6. 結合兩個ASP.NET Core MVC項目
- 7. 結合項目兩個列表
- 8. 我如何結合兩個Android項目
- 9. 基於兩列合併兩個文件
- 10. 如何組合基於兩列的兩個數據框?
- 11. iOS(或OS X)項目取決於框架的兩個版本
- 12. 如何在iPhone上結合兩個項目?
- 13. 合併兩個laravel項目
- 14. 合併兩個VB.Net項目
- 15. 合併兩個android項目
- 16. 合併兩個項目
- 17. 兩個項目的Maven配置
- 18. 可以在同一個項目中使用兩個框架嗎?
- 19. 如何將兩個maven webapps合併到一個項目中
- 20. 組合框結合基礎上的兩個來源性質的平等選擇項目使用的DataTemplate
- 21. 結合兩個SharedArrays的基本操作
- 22. 如何使用node.js結合基於id(transectionid)的兩個集合?
- 23. Git:創建一個項目框架,並讓項目基於框架
- 24. 合併或合併兩個項目。兩個代表,兩個窗口
- 25. 在一個項目中的三個框架的Maven原型
- 26. 在列表中組合兩個項目
- 27. 兩個項目
- 28. 基於上一個組合框的Excel組合框下拉項目
- 29. 合併兩個集合,總結等領域的重複項目
- 30. 結合兩個文本框的值