2011-10-19 6 views
1

私はSimpleObjectクラスなぜSpring.Netは設定を解析中にオブジェクトをインスタンス化するのですか?

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

とシンプルな春の構成を有する:

<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> 

を使用することができます。

+0

詳細な回答ありがとうございます。 –

1

[OK]を、私は愚かだ、

が、これは単に

<object id="simpleObject" type="SpringTest.SimpleObject, SpringTest" lazy-init="true" /> 
関連する問題