【问题标题】:How to use setters in Spring如何在 Spring 中使用 setter
【发布时间】:2015-02-08 16:05:24
【问题描述】:

我已经意识到,每当引用同一个实例时,引用范围为 @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.setItem(item); 中的A 实例似乎与a.method(); 中的不同,因此无法在@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS, value = "prototype") 范围内的bean 中使用访问器方法。

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

【问题讨论】:

    标签: java spring scope


    【解决方案1】:

    去掉 proxyMode 上的 A bean。使用 proxyModeTARGET_CLASS 时,bean 实际上是一个代理,它将任何方法调用委托给一个新实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      相关资源
      最近更新 更多