在Groovy Bean Definition DSL中使bean定义与顺序无关

时间:2014-07-09 07:23:49

标签: spring grails groovy spring-groovy-config

我目前在新Groovy Bean Definition DSL中看到的唯一缺点是必须在依赖顺序中声明闭包中的bean。例如,虽然这有效:

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 个答案:

答案 0 :(得分:1)

关于使用ref("repository")的评论是完成您要做的事情的建议。 在示例中使用ref而不是变量名与使用Spring引用属性进行bean引用相同。

您可以在Grails and Spring的文档部分中阅读有关此内容以及Spring bean构建器DSL的其他功能的更多信息。