2011-10-19 39 views
1

我有一個SimpleObject爲什麼Spring.Net在解析配置時實例化對象?

public class SimpleObject 
{ 
    public SimpleObject() 
    { 
     Console.WriteLine("Instantiated"); 
    } 
} 

和一個簡單的Spring配置:

<object id="simpleObject" type="SpringTest.SimpleObject, SpringTest" /> 

當我分析配置,以獲取上下文以它傳遞給我的對象工廠:

_context = (IApplicationContext)ConfigurationManager.GetSection("spring/context"); 

我意識到我的SimpleObject被實例化。這聽起來像是一個奇怪的行爲。這是正常的 ?我怎樣才能避免這種情況?當我明確要求_context創建一個對象時,我只希望創建對象。

回答

0

我看見你發現適合自己的配置...但這裏有一個答案的「爲什麼」的一部分題。

默認情況下,對象具有單身作用域。 Spring在構造容器時實例化單例。根據to the docs這樣做是爲了儘可能早地檢測配置問題,即在容器施工時間。

您可以通過指定lazy-init="true"來覆蓋對象定義中的此默認行爲。然後,在容器首次請求時,或者第一次需要構建另一個對象時,將創建單例。

請注意,您還可以使用...

<objects default-lazy-init="true"> 
    <!-- no objects will be pre-instantiated... --> 
</objects> 

...讓延遲初始化默認爲true容器中的所有對象。

+0

感謝您的詳細解答。 –

1

好吧,我笨,

這只是

<object id="simpleObject" type="SpringTest.SimpleObject, SpringTest" lazy-init="true" /> 
相關問題