S2Container

★diconファイルとアノテーション

★コンポーネントの取得

S2Container.getComponent(Object componentKey)

Hoge hoge = (Hoge) container.getComponent(Hoge.class);

Hoge hoge = SingletonS2Container.getComponent(Hoge.class);

Hoge hoge = (Hoge) container.getComponent("hoge");

Hoge hoge = SingletonS2Container.getComponent("hoge");

★DIのタイプ

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"

"http://www.seasar.org/dtd/components24.dtd">

<components>

<component name="..." class="...">

<arg>...</arg> コンストラクタ・インジェクション

<property name="...">...</property> セッター・インジェクション

<initMethod name="..."> メソッド・インジェクション

<arg>...</arg>

</initMethod>

</component>

</components>

@Binding("foo") フィールド・インジェクション

private Foo foo;

public Foo foo; 自動バインディング

★暗黙コンポーネント

★diconファイルのインクルード

<components>

<!--暗黙的な条件インクルード-->

<include path="jta.dicon"/>

<!--明示的な条件インクルード-->

<include condition="#ENV == 'ut'" path="warmdeploy.dicon"/>

<include condition="#ENV == 'ct'" path="hotdeploy.dicon"/>

<include condition="#ENV != 'ut' and #ENV != 'ct'" path="cooldeploy.dicon"/>

</components>

●includeタグ

<components>

<include path="foo.dicon"/>

<include path="bar.dicon"/>

</components>

一つのファイルが別のファイルを参照する

●XIncludeタグ

<components

xmlns:xi="http://www.w3.org/2001/XInclude">

<xi:include href="/foo.dicon"/>

<xi:include href="/bar.dicon"/>

</components>

一つのファイルを複数のファイルに分割する(相互に参照が可能)

★自動登録

コンポーネント

<component

class="org.seasar.framework.container.autoregister.

FileSystemComponentAutoRegister">

<property name="autoNaming">

<component class="org.seasar.framework.container.autoregister.DefaultAutoNaming">

<initMethod name="setCustomizedName">

<arg>"example.impl.HogeImpl"</arg>

<arg>"hoge"</arg>

</initMethod>

</component>

</property>

<initMethod name="addClassPattern">

<arg>"example.impl"</arg>

<arg>".*Impl"</arg>

</initMethod>

</component>

<component class="org.seasar.framework.container.autoregister.JarComponentAutoRegister">

<property name="referenceClass">

@junit.framework.TestSuite@class

</property>

<property name="jarFileNames">"junit.*"</property>

<initMethod name="addClassPattern">

<arg>"junit.framework"</arg>

<arg>"TestSuite"</arg>

</initMethod>

</component>

<component class="org.seasar.framework.container.autoregister.ComponentAutoRegister">

<initMethod name="addReferenceClass">

<arg>@example.impl.HogeImpl@class</arg>

</initMethod>

<initMethod name="addClassPattern">

<arg>"example.impl"</arg>

<arg>".*Impl"</arg>

</initMethod>

</component>

アスペクト

<include path="aop.dicon"/>

...

<component

class="org.seasar.framework.container.autoregister.AspectAutoRegister">

<property name="interceptor">aop.traceInterceptor</property>

<initMethod name="addClassPattern">

<arg>"example.impl"</arg>

<arg>".*Impl"</arg>

</initMethod>

</component>

<component

class="org.seasar.framework.container.autoregister.InterfaceAspectAutoRegister">

<property name="interceptor">aop.traceInterceptor</property>

<property name="targetInterface">@example.Sample@class</property>

</component>

メタデータ

<component

class="org.seasar.framework.container.autoregister.MetaAutoRegister">

<meta name="autoRegister">

<meta name="hoge"</meta>

</meta>

<initMethod name="addClassPattern">

<arg>"example.impl"</arg>

<arg>".*Impl"</arg>

</initMethod>

</component>