<html>
<body>
S2コンテナとその構成要素を定義するインターフェースおよび、S2コンテナの振舞いに関連した例外クラスを提供します。
<p>
このパッケージを構成する主な要素は、以下のとおりです。
<dl>
<dt>コンテナ本体(<a href="S2Container.html">S2Container</a>)</dt>
<dd>
S2コンテナ本体は、各コンポーネントの定義情報を保持し、必要に応じてコンポーネントの生成・提供を行います。
S2コンテナは階層構造をもつことができ、diconファイルの&lt;include&gt;要素はS2コンテナの階層構造として内部的には表現されます。
</dd>
<dt>定義情報(~Def)</dt>
<dd>
diconファイルやアノテーションで指定されたコンポーネントの定義情報は、S2コンテナ上では
<a href="ComponentDef.html">ComponentDef</a>、<a href="PropertyDef.html">PropertyDef</a>
などの定義情報として保持されます。
</dd>
<dt>定義情報の取得方法(~DefAware)</dt>
<dd>
diconファイル上で&lt;initMethod&gt;要素の子要素として&lt;arg&gt;要素を書くように、定義情報は親子関係を持ちます。
親要素から子要素の定義情報を取り出す方法は、親要素が2種類以上の子要素をもつ場合<sup>※1</sup>があるため、
子要素ごとにインターフェース<sup>※2</sup>として定義されています。
</dd>
<dt>式(<a href="Expression.html">Expression</a>)</dt>
<dd>
S2コンテナでは、コンポーネントの定義や値の定義に、式を利用することが出来ます。標準では、OGNL式をサポートしています。
</dd>
<dt>外部情報へのアクセス方法(<a href="ExternalContext.html">ExternalContext</a>)</dt>
<dd>
S2コンテナの外部に保持したコンポーネントへアクセスするための方法を定義しています。
例えば、Webコンテナやポートレットのrequestスコープに保持したコンポーネントへのアクセス方法を定義するのに利用しています。
</dd>
<dt>コンポーネントの構築方法(~Assembler)</dt>
<dd>
S2コンテナでは、コンストラクタ、プロパティ設定、初期化メソッドの呼び出しの順に実行してコンポーネントを組み立てますが、
そのそれぞれを<a href="ConstructorAssembler.html">ConstructorAssembler</a>、
<a href="PropertyAssembler.html">PropertyAssembler</a>、
<a href="MethodAssembler.html">MethodAssembler</a><sup>※3</sup>が担当します。
</dd>
</dl>
<p style="text-indent:-1em; padding-left:1em">
※1 親要素が子要素の定義情報を取得するインターフェースを複数実装します。
</p>
<p style="text-indent:-1em; padding-left:1em">
※2 ~DefAware系インターフェースは、子要素である定義情報の追加(add~Def)、要素数の取得(get~DefSize)、
定義情報の取得(get~Def)の3種類のメソッドを持ちます。
</p>
<p style="text-indent:-1em; padding-left:1em">
※3 このインターフェースは、S2コンテナによって管理されているコンポーネントが破棄される際の、
<a href="DestroyMethodDef.html">終了メソッド</a>の実行にも用いられます。
</p>
</p>
<p>
diconファイルのタグとS2コンテナの構成要素を表すインターフェースは、直接関連しています。下表にその関係を示します。
<table border="1">
<tr class="TableHeadingColor">
        <th colspan="4">タグ(Tigerアノテーション)とS2コンテナの構成要素を表すインターフェースの関係</th>
</tr>
<tr>
        <th>diconファイルタグ</th>
        <th>Tigerアノテーション</th>
        <th>要素定義インターフェース</th>
        <th>要素保有インターフェース</th>
</tr>
</tr>
        <td>&lt;components&gt;</td>
        <td style="text-align:center;">-</td>
        <td><a href="S2Container.html">S2Container</a></td>
        <td style="text-align:center;">-</td>
</tr>
<tr>
        <td>&lt;component&gt;</td>
        <td>@Component</td>
        <td><a href="ComponentDef.html">ComponentDef</a></td>
        <td style="text-align:center;">-</td>
</tr>
<tr>
        <td>&lt;arg&gt;</td>
        <td style="text-align:center;">-</td>
        <td><a href="ArgDef.html">ArgDef</a></td>
        <td><a href="ArgDefAware.html">ArgDefAware</a></td>
</tr>
<tr>
        <td>&lt;property&gt;</td>
        <td>@Binding<sup>※4</sup></td>
        <td><a href="PropertyDef.html">PropertyDef</a></td>
        <td><a href="PropertyDefAware.html">PropertyDefAware</a></td>
</tr>
<tr>
        <td>&lt;initMethod&gt;</td>
        <td>@InitMethod</td>
        <td><a href="InitMethodDef.html">InitMethodDef</a></td>
        <td><a href="InitMethodDefAware.html">InitMethodDefAware</a></td>
</tr>
<tr>
        <td>&lt;destroyMethod&gt;</td>
        <td>@DestroyMethod</td>
        <td><a href="DestroyMethodDef.html">DestroyMethodDef</a></td>
        <td><a href="DestroyMethodDefAware.html">DestroyMethodDefAware</a></td>
</tr>
<tr>
        <td>&lt;aspect&gt;</td>
        <td>@Aspect</td>
        <td><a href="AspectDef.html">AspectDef</a></td>
        <td><a href="AspectDefAware.html">AspectDefAware</a></td>
</tr>
<tr>
        <td>&lt;interType&gt;</td>
        <td>@InterType</td>
        <td><a href="InterTypeDef.html">InterTypeDef</a></td>
        <td><a href="InterTypeDefAware.html">InterTypeDefAware</a></td>
</tr>
<tr>
        <td>&lt;meta&gt;</td>
        <td style="text-align:center;">-</td>
        <td><a href="MetaDef.html">MetaDef</a></td>
        <td><a href="MetaDefAware.html">MetaDefAware</a></td>
</tr>
</table>
<p style="text-indent:-1em; padding-left:1em">
※4 @Propertyアノテーションは、フィールドに対応するアクセッサをコンポーネントに追加することを表します。
</p>
</p>
</body>
</html>