OSGi Blueprint配置:注入bean引用列表

时间:2013-05-29 15:52:47

标签: java osgi blueprint-osgi

我正在尝试在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 schemaR4.2 enterprise spec(我们正在使用),但没有找到合适的内容。但这只是一个明显的用例,我无法相信这是不可能的。

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

2 个答案:

答案 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”)