2012-07-19 72 views
2

我有一堆Spring bean,其中一些需要从其他bean初始化,其中一些需要从其他bean的属性初始化。例如: -Groovy Spring DSL:使用其他bean的属性构建beans

Foo { 
} 

Bar { 
    String getBaz() 
} 

Qux { 
    Qux(Foo foo, String baz) 
} 

我想我可以写类似

beans = { 
    foo(Foo) {} 
    bar(Bar) {} 
    qux(Qux, ref('foo'), ref('bar').baz) {} 
} 

,但显然,这并不工作,因为ref('bar')不是吧,这是一个RuntimeBeanReference

在普通的Spring(3+)中,我想用spring expressions明显可能,但我无法弄清楚Grails Spring DSL的必要语法。可以做到吗?

回答

4

我想你的意思是类看起来像这样:

class Foo { 
} 

class Bar { 
    String baz 
} 

class Qux { 
    Foo foo 
    String baz 

    Qux(Foo f, String b) { 
     foo = f 
     baz = b 
    } 
} 

和第二ref('foo')应该已经ref('bar')。然后这将工作:

beans = { 
    foo(Foo) 
    bar(Bar) { 
     baz = 'wazzup' 
    } 
    qux(Qux, ref('foo'), '#{bar.baz}') 
} 
+0

非常多。谢谢! – 2012-07-20 00:39:05

+0

P.S.修正了原来的问题,供后来的读者阅读。 – 2012-07-20 17:24:28

+1

Burt,这是否仅适用于构造函数?我尝试过'bean(MyService){prop ='#{anotherBean.foo()}'}'但没有工作,空指针。 – raffian 2014-06-21 05:36:32

相关问题