我想用它的名字来获取内部bean。是否可以使用Spring API?
现在我正在使用这样的Spring 2.5 API
ConfigurableApplicationContext.getBean(String paramString)
XML示例:
<bean id="parent" parent="t_Parent">
<property name="items">
<bean id="child" parent="t_Child">
<property name="ABC" value="test"/>
</bean>
</property>
</bean>
我想通过id“child”获取内部(t_Child)bean。例如。 ConfigurableApplicationContext.getBean( “子”)。 Spring找不到这样的bean(因为它是内在的)。同时.getBean(“parent”)工作正常。
有什么想法吗?
答案 0 :(得分:4)
你做不到。
来自the docs:
或元素内的元素用于定义所谓的内部bean。内部bean定义不需要定义任何id或名称,最好不要指定任何id或名称值,因为容器将忽略id或name值。< / p>
如果您需要它,请将其定义为常规bean。
答案 1 :(得分:2)
你不能,但你可以在外面创建你的内部bean(因此它不再是内部bean ...)然后在属性中引用它:
<bean id="child" parent="t_Child">
<property name="ABC" value="test"/>
</bean>
<bean id="parent" parent="t_Parent">
<property name="items" ref="child"/>
</bean>
答案 2 :(得分:1)
除了其他(大多数是有效的)答案和解决方案之外,我想春天的方式是使用BeanWrapper
界面:
final BeanWrapper bw =
new BeanWrapperImpl(applicationContext.getBean("parent"));
Object innerBean = bw.getPropertyValue("child");
但我想这意味着必须为该物业提供一个吸气剂(不仅仅是一个定位器)。
<强>参考:强>
答案 3 :(得分:0)
如果你升级到Spring 3.x,你应该能够使用Spring Expression Language。有一些例子直接从另一个属性引用bean属性(比如link text)。从Java执行此操作的代码有点类似,但我找不到此方案的确切示例。
但是,我会说,如果你试图使用“getBean()”,那你就做错了。您可以在上下文中轻松使用SpEL来定义引用该内部bean的bean或bean属性。