我正在尝试使用ApplicationContextAware接口在ApplicationContext中动态注册一些spring bean。我正在使用BeanDefitionBuilder来构建bean定义,并使用DefaultListableBeanFactory.registerBeanDefinition()注册它们。我现在正在尝试构建的bean在XML中看起来像这样:
<bean id="compositeBean" class="SomeClass">
<property name="checks">
<list>
<ref bean="bean1"/>
<ref bean="bean2"/>
<ref bean="bean3"/>
</list>
</property>
</bean>
我有一个BeanDefinitions列表(bean1,bean2,bean3)可用。当我尝试使用
时BeanDefinitionBuilder.genericBeanDefinition(SomeClass.class)
.addPropertyValue("checks", checks);
我最终得到了错误
org.springframework.beans.factory.BeanCreationException: Error
creating bean with name 'compositeBean': Initialization of bean
failed; nested exception is
org.springframework.beans.ConversionNotSupportedException: Failed to
convert property value of type
'org.springframework.beans.factory.config.BeanDefinition[]' to
required type 'SomeClass[]' for property 'checks'; nested exception is
java.lang.IllegalStateException: Cannot convert value of type
[org.springframework.beans.factory.support.GenericBeanDefinition] to
required type [SomeClass] for property 'checks[0]': no matching
editors or conversion strategy found
如何以编程方式将bean引用列表添加到我的compositeBean?
答案 0 :(得分:4)
看看org.springframework.beans.factory.support.ManagedList
这就是<util:list/>
用于编译列表的内容。创建一个ManagedList作为变量“检查”并将该对象设置为属性值。