使用特定於環境的值配置Grails服務的最佳方式是什麼?我認爲有兩種選擇:特定於環境的Grails服務配置
- 從服務類中訪問grailsApplication值或
- 配置Config.groovy中或resources.groovy一豆關閉該服務的bean。
我見過幾個帖子在stackoverflow和其他地方,顯示如何做#1(訪問服務中的grailsApplication)。其中一個這樣的帖子是:Inject grails application configuration into service。
但是,我認爲這會造成服務與Grails的不必要的耦合。這不是類似於在pojo中訪問Spring的applicationContext,而不是配置/注入值?此外,我還沒有得到任何好運,因此尚未在服務類的單元測試中工作。
兩本書都有注入屬性的例子(方法#2)。本書Grails 2權威指南第10章標題爲「服務在行動」一節展示瞭如何做到這一點,但沒有環境特定的價值。本書Groovy和Grails食譜第16-2節也展示了一個使用resources.groovy的例子,但我還沒有能夠使它工作。
以下博客文章也有一個很好的例子,但不是特定環境:http://ldaley.com/post/1253952347/getting-more-out-of-property-override-configuration。 Grails Reference的第15章也與這些示例一致,並說明如何在每個環境基礎上設置bean上的屬性。
但是,任何一種方法的例子都不能以任何方式給出任何意見或理由。這兩種方法真的沒有優點和缺點嗎?注入方法不會更容易進行單元測試,並且更符合春季做事的方式嗎?
Nathan
謝謝,這實際上是有道理的。最後,一些理性的方法! –
從你所說的話來看,Grails發明人似乎已經在思考上發生了轉變,因爲你所描述的問題類型與重複的值在春季配置中應該是相同的值。因此,對基本上集中在grailsApplication下的配置值的引用是一個實際的改進。也許用groovy來設置比在Java中更容易,否則它也可能在Spring中成爲一個選項。 –
@NathanWard覆蓋配置方法在某些情況下是非常有用的,主要是當你想要將屬性值注入到你不控制的bean(例如由插件提供的屬性值)時。 –