我已经在我的应用程序中创建了一个原型范围的bean,我正在使用setter将其注入另一个bean.但是当我在我的类中使用注入的bean时,它总是每次使用相同的实例而不是新的实例.
这是代码的快照
<bean name="prototypeScope" Class="A" scope="prototype">
</bean>
<bean Class="Consumer">
<property name="a" ref="prototypeScope" />
</bean>
public class Consumer{
privare A a;
public void setA(A a){
this.a = a;
}
public void consume(){
a.doSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
问候
这是与原型范围豆相关的常见错误.
只有当我们从应用程序上下文请求bean的副本时,才会创建原型范围bean的新实例,而不是每次我们在实例上调用方法时.
在您的情况下,您使用后者的setter将原型范围的bean注入另一个bean,因此创建第二个类将创建原型范围bean的新实例.但它会使用相同的实例,只要它被你另一个mannualy替换.
如果在特定操作(如方法调用)期间需要原型范围bean的新实例,则必须从应用程序内容中获取该bean的新实例.
例如:
<bean name="prototypeScope" Class="A" scope="prototype">
</bean>
<bean Class="Consumer">
</bean>
Run Code Online (Sandbox Code Playgroud)
Java代码:
public class Consumer implements ApplicationContextAware{
privare ApplicationContext context;
public void setApplicationContext(ApplicationContext context){
this.context = context;
}
public void consume(){
A a = context.getBean("prototypeScope", A.class);
a.doSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,当调用consume方法时,会创建一个新的A类实例.
| 归档时间: |
|
| 查看次数: |
3246 次 |
| 最近记录: |