2015-02-08 16 views
2

我已经意识到,引用范围为@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS, value = "prototype")的spring bean的实例似乎会调用bean的新实例。如何在Spring中使用setters

例如:

@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();,由此使得IMPOSIBLE在豆类使用存取方法与@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS, value = "prototype")范围。

这是预期的行为?我是否错过了关于@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS, value = "prototype")的使用的一些理解?

回答

2

摆脱您的A豆上的proxyMode。使用proxyModeTARGET_CLASS,这个bean实际上是一个将任何方法调用委托给一个新实例的代理。