【发布时间】:2017-10-26 19:03:38
【问题描述】:
是否可以有一个包含闭包的 bean 定义?有时,我希望拥有几乎相同的 Class 实例,但在一些小行为上有所不同——不仅仅是数据,因此仅在我的 bean 定义中传递不同的字段是不够的。
所需的 bean 定义示例:
beans {
myCustomWidget1(Widget) {
myClosure = { w -> return w.doThis() }
}
myCustomWidget2(Widget) {
myClosure = { w -> return w.doThat() }
}
}
示例类:
class Widget {
Closure myClosure
...
}
问题在于Anonymous (Inner) Beans 已经使用了闭包语法,并且这些匿名bean 在应用程序启动时被评估,而不是设置类的闭包字段。这显然会导致运行时异常。
我以前通过创建注入到我的 bean 中的小型辅助类来克服这个问题,并将行为更改编写为具有相同名称的方法。我相信这是正确的方法,但我希望有一种更简洁的“常规”方式。
我们使用的是 Grails 2.4.2,但我相信 BeanBuilder 会将我想要的 Closure 视为匿名 bean,无论 grails/groovy 版本如何。
【问题讨论】:
标签: spring grails groovy javabeans spring-bean