2014-07-09 30 views
1

我目前在新的Groovy Bean Definition DSL中看到的唯一缺點是閉包中的bean必須以依賴順序聲明。例如,雖然這個工程:在Groovy Bean中定義bean定義DSL與訂單無關

beans { 
    repository(RepositoryImpl) 
    service(ServiceImpl) { 
     repository = repository 
    } 
} 

這是行不通的:

beans { 
    service(ServiceImpl) { 
     repository = repository 
    } 
    repository(RepositoryImpl)   
} 

這是因爲在封閉代碼執行它行由行。

這是我們在Spring中不習慣的東西 - XML定義被解析爲一個DOM,在Java配置中,bean定義是方法,因此聲明順序並不重要。

我做了一些努力來打破這個閉包來模仿Java配置(每個bean的閉包/方法),但我帶來的代碼非常醜陋和冗長。

是否有人有任何想法如何重構此閉包多個訂單獨立的代碼單元?

P.S.我知道這個定義風格來自Grails,所以也許Grails社區已經有了答案?

+1

你不能做'ref(「repository」);'? – christopher

+0

不知道我理解你的評論... – JBaruch

+1

關於使用ref(「repository」)的評論是一個建議來完成你正在尋找的東西。像在你的例子中那樣使用ref而不是變量名與使用Spring引用的Spring ref屬性相同。試一試。 –

回答

1

有關使用ref("repository")的意見是建議您完成您正在尋找的任務。 使用ref而不是變量名,因爲在您的示例中使用的是與爲bean引用使用Spring ref屬性相同。

您可以在Grails and Spring的文檔部分閱讀更多關於此以及Spring bean生成器DSL的其他功能。