2015-07-21 60 views
6

在HTTPS的文檔:// www.playframework.com/documentation/2.4.x/JavaDependencyInjection提到DI現已集成到框架:什麼方式來啓動一個遊戲2.4與Java的Java應用程序?

開箱,播放提供了依賴注入支持基於 JSR 330的默認JSR 330實現,它自帶的播放是 吉斯,但其他JSR 330的實現可插入。

我無法找到使用Spring任何HOWTO或工作的例子。

https://www.playframework.com/documentation/2.4.x/Tutorials上的當前文檔鏈接到https://analogafe.com/activator/template/play上的「使用Spring Data JPA播放」示例-spring-data-jpa,但評論已經提到它已過時。此外,在GitHub頁面https://github.com/typesafehub/play-spring-data-jpa上還有一些未解決的問題提及它在Play 2.4.0中無法使用。

該代碼是2歲,仍然使用Global.java類來引導Spring。我會很好,但是由於方法getControllerInstance(),代碼不能在Play 2.4中編譯。

該項目https:// github.com/jroper/play-spring看起來很有前景,但它在Scala中,並且列出了很多TODO,以及https://github.com/jroper/play-SpringApplicationLoader類, spring/blob/master/core/src/main/scala/play/api/inject/spring/SpringApplicationLoader.scala看起來太複雜了,我只想開始一個簡單的Spring上下文。

現在它看起來像我不得不降級播放使用舊Global.java破解(並找出所需的所有變化......)

(編輯一些請把回鏈接時,他們是合法的,它不會讓我...)

回答

6

多的人有這個問題與播放2.4,導致一些人堅持使用2.3。

您從Play功能中引用的文本存在的問題是,它表明使用Play 2.4可以插入任何JSR 330容器,但不幸的是這是非常困難的,迄今爲止,仍然沒有完全可行的解決方案。這主要是針對播放自己的哲學,其中規定:

在播放2,我們想讓它很容易使用的任何數據存儲 驅動,ORM,或任何其他數據庫訪問庫沒有任何特殊 整合網絡框架。 (當你想使用Spring ORM的Play 2.4中並非如此。)

https://groups.google.com/forum/#!topic/play-framework/hFOtzSNSDsQ也討論了這個問題,鏈接到多個解決方案的嘗試,其中最好的解決方案是不充分的工作,但它可能滿足您的需求: https://github.com/zarinfam/play24-guice-spring

另一種解決方案是爲Spring ApplicationContext創建一個單例,並在您的Play客戶端類中使用該單例。然後(不幸的是)你沒有在這些類中進行依賴注入,但是至少你可以以一種乾淨的依賴注入的方式使用非Play類。

更新時間: 我剛剛創建了這方面的工作發揮-Java的Spring模板在GitHub上:https://github.com/jtdev/play-java-spring

+1

是的,這就是我做的也是:一個吉斯「@辛格爾頓」服務在我「@Inject」 ApplicationLifecycle並手動啓動Spring容器。然後我「@Inject」這個Guice服務,無論我需要訪問Spring服務。這不是完美的,但它的工作原理。 –

+3

哇,玩人們正在用他們的「最小」更新做出一些奇怪的決定。遷移到2.3並不是一件容易的事,因爲他們對API做了很大的改變,現在我們不能輕易地遷移到2.4,因爲沒有Global。在2.5.1中,他們不支持JAVA,並且在2.5.2中不再支持SCALA。 hahhaha – rsan

+1

嗨@Devabc,我正在停止更新到2.4,但我想使用最新的netty容器,唯一干淨的方式是更新爲2.4和更高版本,以玩2.5。您是否使用Play-Java-Spring模板試驗過任何類型的問題?性能開銷? SpringDI的完整規範是否可用?在我對sep/2015的評論中,我正在取笑Play如何打破版本之間的兼容性。剛剛讀到2.5的遷移指南,它看起來非常長:S – rsan

相關問題