【发布时间】:2014-06-02 01:26:50
【问题描述】:
在 Grails 2.3.7 上,尝试使用 resources.groovy 中的 bean 引用设置嵌套映射值
msgbean(Message){
text = 'hello'
}
bean1(ConfigObj){
prop = [ref('msgbean')]
}
bean2(ConfigObj){
prop = [key: ref('msgbean')]
}
bean3(ConfigObj){
prop = [key:[msg:ref('msgbean')]]
}
bean1 和 bean2 连接正确,
println '1 ' + bean.prop[0].text
println '2 ' + bean2.prop['key'].text
打印...
1 hello
2 hello
但是,bean3 没有得到对 msgbean 的引用...
println '3 ' + bean3.prop['key']['msg'].text
Error |
No such property: text
仔细观察,bean3.prop['key']['msg'] 最终不是Message,而是RuntimeBeanReference 的一个实例,beanName=<msgbean>;所以我尝试在其上调用 getSource(),返回 null,这可能发生在 according 到文档中(对我来说不行)
为什么ref() 不适用于嵌套地图?
替代方案:内联 DSL 配置
这样的东西也不错;这可能吗?试一试,返回一个闭包,执行时返回 'hello';这并不奇怪,但不是我想要的;需要 Message 实例。
bean3(ConfigObj){
prop = [key:[msg:{Message -> {
text = 'hello'
}
]]
}
【问题讨论】: