4

我正在尝试在我的 blueprint.xml 的列表属性中注入一个 bean 列表(类似于您在Spring 配置中所做的):

蓝图.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>

另一个类:

public class AnotherClass {
   private List<MyClass> myClasses;

   public void setMyClasses(List<MyClass> classes) {
     this.myClasses = classes;
   }
}

我查看了Blueprint XML 模式R4.2 企业规范(我们正在使用),没有发现任何合适的。但这只是一个如此明显的用例,我无法相信这是不可能的。

任何建议我在这里缺少什么以及如何做到这一点?

4

2 回答 2

6

我遇到了同样的问题并在这里找到了答案。在 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>
于 2014-01-24T13:35:36.727 回答
1

如果您没有遇到示例代码中发现的格式错误的 xml 问题(假设结束列表标记中缺少斜杠的错字),列表元素实际上应该可以在本地工作。

这是一个非常好的幻灯片,上面有描述的用法:

http://www.slideshare.net/gnodet/osgi-blueprint-services-1622424

[下面的原始建议可能仍然有效,但不应被要求]

但是,您仍然应该能够使用其他 spring 模式。

尝试添加 util 架构:

xmlns:util="http://www.springframework.org/schema/util"

然后命名列表元素:

<util:list>
    <ref bean="myBean" />
</util:list>

(这在 spring 中可以无缝工作,因为 beans 命名空间会自动导入其他几个命名空间,包括“util”)

于 2013-05-29T20:06:43.267 回答