Ana*_*and 5 java spring scope prototype-scope
我有两个豆,父母和孩子.子bean我已声明为Protoype范围.
我想新的子对象用于调用Parent类中的任何子方法.例如.在下面的例子中,我希望语句1调用方法sayHi对不同的子对象和语句2调用sayHi1对不同的子对象.
一种方法是在调用任何子方法之前实现ApplicationContextAware并获取新的子对象context.getBean("")
.但我不想这样做.
还有其他选择吗?
@Component
public class Parent{
@Autowired
Child child;
public void sayHello(){
child.sayHi(); -------------- (1)
}
public void sayHello1(){
child.sayHi1(); --------------- (2)
}
}
@Component
@Scope(value=BeanDefinition.SCOPE_PROTOTYPE)
public class Child{
public void sayHi(){
System.out.println("Hi Spring 3.0");
}
public void sayHi1(){
System.out.println("Hi1 Spring 3.0 ");
}
}
Run Code Online (Sandbox Code Playgroud)
Bij*_*men 11
修复只是将原型bean标记为作用域代理,这意味着当你将较小范围的bean注入较大的范围时(比如将原型注入单例中的情况)然后代理bean的注入将被注入到更大的范围中,当通过代理调用bean的方法时,代理会理解范围并将适当地做出响应.
@Component
@Scope(value=BeanDefinition.SCOPE_PROTOTYPE, proxyMode=ScopedProxyMode.TARGET_CLASS)
public class Child{
Run Code Online (Sandbox Code Playgroud)
这是一个参考
new Child
我认为你每次都必须自己做一个,或者确实利用春天的环境来获得新鲜的豆子。
Spring只会在需要注入某些东西时(在原型的情况下)创建一个新实例。当你在课堂上时,你实际上就脱离了 Spring 的范围。
这是一个类似的帖子:@Scope("prototype") bean scope not create new bean
http://static.springsource.org/spring/docs/3.0.0.M3/reference/html/ch04s04.html#beans-factory-scopes-prototype第 4.4.2 和 4.4.3 部分相关。
归档时间: |
|
查看次数: |
5615 次 |
最近记录: |