我已经意识到,只要引用同一个实例,引用范围为@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();
    }
}


Aa.setItem(item);的实例似乎与a.method();中的实例不同,因此无法在范围为@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS, value = "prototype")的bean中使用访问器方法。

这是预期的行为吗?我是否缺少对@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS, value = "prototype")用法的理解?

最佳答案

摆脱proxyMode bean上的A。在proxyModeTARGET_CLASS的情况下,bean实际上是一个代理,它将任何方法调用委托给新实例。

关于java - 如何在 Spring 使用二传手,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28396124/

10-11 14:28