2015-02-08 13 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實際上是一個將任何方法調用委託給一個新實例的代理。