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>