2

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

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

4

2 回答 2

4

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

osgi 文档:

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

例子

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

我的服务.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>
于 2013-11-06T02:26:23.417 回答
0

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

于 2013-10-16T06:38:31.423 回答