2013-01-15 103 views
0

我遇到了一個有線問題。Spring每次使用實例變量都會返回新實例

這是我的對象定義。

package unittest.prototypetest; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.annotation.Scope; 
import org.springframework.stereotype.Component; 

@Component("valObject") 
@Scope("prototype") 
public class ValueObject { 
    private String value1; 
    private String value2; 

    //... getter and setter omitted. 
} 

我定義如下組件掃描標籤:

<context:component-scan base-package="unittest" scoped-proxy="targetClass" /> 

然後我試圖通過ApplicatioinContext得到它的實例,

//ApplicationContextHelper is a class written by me to easily create ApplicationContext 
ValueObject valObject = ApplicationContextHelper.getBean("valObject"); 
valObject.setValue1("v1"); 
valObject.setValue2("v2"); 

System.out.println(valObject.getValue1()); 
System.out.println(valObject.getValue2()); 

最有線結果如下所示:

2013-01-15_14:04:02.245| DEBUG | o.s.b.f.s.DefaultListableBeanFactory | Returning cached instance of singleton bean 'valObject' 
2013-01-15_14:04:02.246| DEBUG | o.s.b.f.s.DefaultListableBeanFactory | Creating instance of bean 'scopedTarget.valObject' 
2013-01-15_14:04:02.246| DEBUG | o.s.b.f.s.DefaultListableBeanFactory | Returning cached instance of singleton bean 'org.springframework.transaction.config.internalTransactionAdvisor' 
2013-01-15_14:04:02.250| DEBUG | o.s.b.f.s.DefaultListableBeanFactory | Returning cached instance of singleton bean 'org.springframework.transaction.config.internalTransactionAdvisor' 
2013-01-15_14:04:02.250| DEBUG | o.s.b.f.s.DefaultListableBeanFactory | Returning cached instance of singleton bean 'org.springframework.transaction.config.internalTransactionAdvisor' 
2013-01-15_14:04:02.252| DEBUG | o.s.b.f.s.DefaultListableBeanFactory | Finished creating instance of bean 'scopedTarget.valObject' 
2013-01-15_14:04:02.295| DEBUG | o.s.b.f.s.DefaultListableBeanFactory | Creating instance of bean 'scopedTarget.valObject' 
2013-01-15_14:04:02.296| DEBUG | o.s.b.f.s.DefaultListableBeanFactory | Finished creating instance of bean 'scopedTarget.valObject' 
2013-01-15_14:04:02.296| DEBUG | o.s.b.f.s.DefaultListableBeanFactory | Creating instance of bean 'scopedTarget.valObject' 
2013-01-15_14:04:02.296| DEBUG | o.s.b.f.s.DefaultListableBeanFactory | Finished creating instance of bean 'scopedTarget.valObject' 
null 
2013-01-15_14:04:02.296| DEBUG | o.s.b.f.s.DefaultListableBeanFactory | Creating instance of bean 'scopedTarget.valObject' 
2013-01-15_14:04:02.297| DEBUG | o.s.b.f.s.DefaultListableBeanFactory | Finished creating instance of bean 'scopedTarget.valObject' 
null 

您可以在每次使用valObject實例時看到,Spring爲我的訪問創建了一個新實例。 ,以便系統輸出null,儘管我設置了值。

我做錯了什麼?請告知,非常感謝。

+0

我不得不提到的問題是我沒有設置「原型」。請看日誌,每次我調用同一個valObject實例的setValue()時,Spring不應該創建一個新的實例! – Matt

回答

0

您已將範圍設置爲原型,這是非單身人士。閱讀更多關於它here.

+0

我確實希望它是一個「原型」,因爲你看到我的代碼示例,它應該保持相同的實例,因爲我只是問了一次。 – Matt

相關問題