LazyInstantiation

メモ。

instance="prototype"のコンポーネントで構成されているプロジェクトと、instance="singleton"で構成されているプロジェクトで起動時間に差が出ることに気が付いた。

DIコンテナに登録するコンポーネントインスタンスタイプをsingletonとマークした場合、DIコンテナの初期化時には、そのコンポーネントインスタンスを前もって生成している。これは典型的なsingletonパターンの実装であり、サーバアプリケーションでは特に問題は無い。一方、sigletonとマークされたコンポーネントは初期化時に全てインスタンス化するために、コンポーネントが大量にあるか、又はコンポーネント生成時の負荷が非常に高い場合、アプリケーション起動までに要する時間に影響がでることがあり、これは起動時間に敏感なクライアントアプリケーションでは問題になる。

同じsingletonでも、初期化時にインスタンスを生成するのは"EagerInstantiation(早期生成)"、初期化時ではなく、必要な時に生成するのを"LazyInstantiation(遅延生成)"として、DIコンテナの初期化時にインスタンスを生成するか否かの選択肢を持てるようにしよう。