在蓝图中连接原型

时间:2013-10-15 15:05:34

标签: osgi blueprint-osgi

与Spring一样,蓝图支持原型范围。但与Spring不同的是,我看不到任何关于如何使用它的文档。

在Spring中你可以要求上下文给你一个新的bean,蓝图世界中的等价物是什么?

2 个答案:

答案 0 :(得分:4)

BlueprintContainer.getComponentInstance()完全符合您的要求。

osgi documentation:

  

Blueprint Container表示蓝图的托管状态   束。 Blueprint Container提供对所有托管的访问   组件。这些是bean,服务和服务引用。一个   可以通过注入预定义来获得蓝图容器   “blueprintContainer”组件ID。

实施例

<强> blueprint.xml:

<!-- blueprintContainer is predefined component here -->
<bean id="myService" class="myPackage.MyService">
   <property name="container" ref="blueprintContainer"/>
</bean>
<!-- prototype which can be created from myService -->
<bean id="myPrototype" class="myPackage.MyPrototype" scope="prototype"/>

<强> MyService.java:

// ...
// create new instance
MyPrototype myPrototype = 
     (MyPrototype) container.getComponentInstance("myPrototype");

<强>的pom.xml:

<!-- BlueprintContainer from Apache Aries-->
<dependency>
  <groupId>org.apache.aries.blueprint</groupId>
  <artifactId>org.apache.aries.blueprint.core</artifactId>
  <version>1.3.0</version>
</dependency>

答案 1 :(得分:0)

如果bean是范围原型,那么每次将bean注入某处时都会创建一个新的bean实例。因此,每个获取范围原型bean的客户端都会获得一个新的bean实例。