问题
Like Spring, blueprint supports the prototype scope. But unlike Spring I can't see any documentation about how to use it.
In Spring you can ask the context to give you a new bean, what's the equivalent in the Blueprint world?
回答1:
BlueprintContainer.getComponentInstance() does exactly what you are looking for.
osgi documentation:
A Blueprint Container represents the managed state of a Blueprint bundle. A Blueprint Container provides access to all managed components. These are the beans, services, and service references. A Blueprint Container can be obtained by injecting the predefined "blueprintContainer" component id.
Example
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>
回答2:
If a bean is of scope prototype then a new instance of the bean is created each time the bean is injected somewhere. Therefore each client that gets a bean of scope prototype injected gets a new instance of the bean.
来源:https://stackoverflow.com/questions/19384659/wiring-a-prototype-in-blueprint