我正在尝试在blueprint.xml的list属性中注入一个bean列表(类似于你在Spring configuration中的做法):
blueprint.xml:
<blueprint
xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0
http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
<bean id="myBean" class="MyClass" />
<bean id="anotherBean" class="AnotherClass">
<property name="myClasses">
<list>
<ref bean="myBean" />
<list>
</property>
</bean>
</blueprint>
AnotherClass:
public class AnotherClass {
private List<MyClass> myClasses;
public void setMyClasses(List<MyClass> classes) {
this.myClasses = classes;
}
}
我查看了Blueprint XML schema和R4.2 enterprise spec(我们正在使用),但没有找到合适的内容。但这只是一个明显的用例,我无法相信这是不可能的。
有什么建议我在这里缺少什么以及如何做到这一点?
答案 0 :(得分:5)
我遇到了同样的问题并找到了答案here。在ref元素中,从bean更改为component-id。
<bean id="myBean" class="MyClass" />
<bean id="anotherBean" class="AnotherClass">
<property name="myClasses">
<list>
<ref component-id="myBean" />
</list>
</property>
</bean>
答案 1 :(得分:1)
如果您没有遇到示例代码中出现的格式错误的xml问题(假设关闭列表标记中缺少斜杠的拼写错误),则list元素实际上应该本机工作。
这是一个非常好的幻灯片,描述了用法:
http://www.slideshare.net/gnodet/osgi-blueprint-services-1622424
[下面的原始建议可能仍然有效,但不应该被要求]
但是,您仍然可以使用其他spring模式。
尝试添加util schema:
xmlns:util="http://www.springframework.org/schema/util"
然后命名空间列表元素:
<util:list> <ref bean="myBean" /> </util:list>
(这在spring中无缝运行,因为beans命名空间会自动导入其他几个名称空间,包括“util”)