S2Container - コンポーネントの定義とライフサイクル
1. コンポーネントの定義はcomponetタグで定義する。
属性名 | 説明 |
---|---|
class(必須) | コンポーネントのクラスを指定する |
name | コンポーネント名を指定する |
instance | コンポーネントのライフサイクルを指定する。詳細は2,3を参照 |
autoBinding | コンポーネントの自動バインディング挙動を指定する |
2. インスタンス管理
instance属性 | 説明 |
---|---|
singleton(default) | S2Container.getComponent()を何度呼び出しても同じインスタンスが返されます。 |
prototype | S2Container.getComponent()を呼び出すたびに新たなインスタンスが返されます。 |
request | リクエスト毎に1つのインスタンスが作成されます。 name属性に指定した名前で、コンポーネントがリクエストに格納されます。 requestを利用するためにはS2ContainerFilterの設定が必要です。 |
session | セッション毎に1つのインスタンスが作成されます。 name属性に指定した名前で、コンポーネントがセッションに格納されます。 sessionを利用するためにはS2ContainerFilterの設定が必要です。 |
application | Servletを使う場合は、ServletContext毎に1つのインスタンスが作成されます。 name属性に指定した名前で、コンポーネントがServletContextに格納されます。 applicationを利用するためにはS2ContainerFilterの設定が必要です。 |
outer | コンポーネントのインスタンスは、S2Container外で作成し、Dependency Injectionだけを行います。アスペクト、コンストラクタ・インジェクションは適用できません。 |
3. ライフサイクル
【S2Containerのライフサイクル】
a. Webアプリケーションの場合、
S2ContainerServletの初期化時にS2Container.init()が呼び出され、
S2ContainerServletの終了時にS2Container.destroy()が呼び出されます。
S2Container.init()が呼び出されたときに、シングルトンのコンポーネントは初期化され、
S2Container.destroy()が呼び出されたときに、シングルトンのコンポーネントは破棄されることになります。
b. Webアプリケーション以外の場合、
明示的にS2Container.init()、 S2Container.destroy()を呼び出す必要があります。
【コンポーネントのライフサイクル】
シングルトンのコンポーネントはS2Container.init()時に初期化されますが、
それ以外のコンポーネントは取得されるときに初期化が行なわれます。
4.【設定ファイル例】
<!-- ルート -->
<components>
<!-- nameはコンポーネント名-->
<component name="component1" class="org.seasar2.Compomnent1">
</component>
<component name="component2" class="org.seasar2.Compomnent1">
</component>
</components>
詳細のタグリファレンスは