|
||||||||||||||||||||||||||||
| 1 2 3 次のページ | ||||||||||||||||||||||||||||
| はじめに | ||||||||||||||||||||||||||||
|
今回はDI処理についてお伝えする予定でしたが、その前に前回のフォローとしてinit処理とprototypeについて解説していきます。 |
||||||||||||||||||||||||||||
| Seasar2でのinit処理 | ||||||||||||||||||||||||||||
|
Seasar2にはinit処理というものがあります。init処理では設定ファイルから取得したコンポーネントを初期化して、singleton(注1)のコンポーネントを生成することができます。
※注1:
DIコンテナはいくつかのインスタンスモードを持ち、singletonはその1つです。singletonのコンポーネントは1度だけ生成され、コンテナから取得するたびに常に同じインスタンスが返されます。 init処理あり/なしのそれぞれでの処理をまとめると、表1、2のようになります。
表1:Seasar2のinit処理を行わない場合(前回)
表2:Seasar2のinit処理を行う場合 実は第1回で紹介した測定結果はinit処理を行っていません。しかし実際の案件では、アプリケーション初期化時にinit処理する方が効率的です。それはコンテナからのコンポーネント取得処理は、アプリケーションへ利用者がアクセスしたタイミングで行われるためです。 ではinit処理を加えるとSeasar2でのコンテナ生成・コンポーネント取得の速度はどれくらい変わるのでしょうか。表1、2を見ると処理がコンテナ生成時へ移っているので、コンテナ生成が遅くなりコンポーネント取得が速くなると予想できます。 なおSpringにおいてもコンテナにApplicationContextを使用すると、Seasar2のinit処理と同様にコンテナ生成時にsingletonコンポーネントを生成できますので、あわせて測定を行います。 |
||||||||||||||||||||||||||||
| 測定プログラム | ||||||||||||||||||||||||||||
|
測定プログラムは第1回とほとんど同じで、Seasar2のコンテナ生成処理にinitを呼ぶ1行を追加します(前回コメントアウトした行は白で示した部分です)。 プログラム(Seasar2)
long start = System.currentTimeMillis();
プログラム(Spring)
long start = System.currentTimeMillis();
SpringもXmlBeanFactoryの代わりにApplicationContextのサブクラスであるClassPathXmlApplicationContextを使うように、1行変更しました。 |
||||||||||||||||||||||||||||
|
1 2 3 次のページ |
||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||

