【问题标题】:Making bean definitions in Groovy Bean Definition DSL order-independent使 Groovy Bean 定义 DSL 中的 bean 定义与顺序无关
【发布时间】:2014-07-09 07:23:48
【问题描述】:

我目前在新的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 的闭包/方法),但是我提供的代码非常丑陋和冗长。

有人知道如何将此闭包重构为多个与顺序无关的代码单元吗?

附注我知道这种定义风格来自 Grails,所以也许 Grails 社区已经有了答案?

【问题讨论】:

  • 不能ref("repository");吗?
  • 不确定我是否理解您的评论...
  • 关于使用 ref("repository") 的评论是完成您想要做的事情的建议。在示例中使用 ref 而不是变量名与使用 Spring ref 属性作为 bean 引用相同。试一试。
  • 耶!我想这是一个标准的 Grails 配置技巧?添加grails 标签是一个不错的决定:) 你想添加答案吗?如果没有,我会添加一个。

标签: spring grails groovy spring-groovy-config


【解决方案1】:

关于使用ref("repository") 的评论是完成您想做的事情的建议。 使用 ref 代替示例中的变量名与使用 Spring ref 属性作为 bean 引用相同。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-26
    • 2018-07-02
    • 1970-01-01
    • 2016-06-08
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多