我已经意识到,只要引用同一个实例,引用范围为@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS, value = "prototype")
的spring bean的实例似乎就会调用该bean的新实例。
例如:
@Component
@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS, value = "prototype")
class Item {
.....
}
@Component
@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS, value = "prototype")
class A {
private Item item;
public void setItem(Item item) {
this.item = item;
}
public void method() {
item.doSomething();
}
}
@Component
@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS, value = "prototype")
class B {
@Autowired
private A a;
@Autowired
private Item item;
void bMethod() {
a.setItem(item);
a.method();
}
}
A
中a.setItem(item);
的实例似乎与a.method();
中的实例不同,因此无法在范围为@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS, value = "prototype")
的bean中使用访问器方法。这是预期的行为吗?我是否缺少对
@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS, value = "prototype")
用法的理解? 最佳答案
摆脱proxyMode
bean上的A
。在proxyMode
为TARGET_CLASS
的情况下,bean实际上是一个代理,它将任何方法调用委托给新实例。
关于java - 如何在 Spring 使用二传手,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28396124/