liguofeng29’s blog

個人勉強用ブログだっす。

【インクルード】【名前空間】【環境名】

1. diconファイルの分割
2. diconファイルの自動切り替え
include : 親は子のコンポーネントが参照できるが、逆はできない。
          containerインスタンス複数生成される。
          
xi:include : 親と子は相互参照可能。
             読み込まるので、containerインスタンスは一つ生成される。
 
app.dicon
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
 
<components>
 
  <include path="aaa.dicon"/>
  <xi:include href="/bbb.dicon">
 
  <!-- 環境名(env.txt)により、読み込みdicon切り替え -->
  <include condition="#ENV == 'ut'" path="ccc.dicon"/>
 
  <!-- 暗黙インクルードにより、優先順にはddd_ut.dicon, ddd_ct.dicon, ddd.diconになる -->
  <include path="ddd.dicon"/>
 
  <component name="sample" class="Sample">
    <!-- 名前空間.コンポーネント名 -->
    <arg>aaa.a</arg>
    <arg>bbb.b</arg>
  </component
</components>
 

 
aaa.dicon
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
<!-- 名前空間指定 -->
<components namespace="aaa">
   <componet name="a" class="A" />
</components>
 

bbb.dicon
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
<!-- 名前空間指定 -->
<components namespace="bbb">
    <componet name="b" class="B" />
</components>
 

s2container.dicon【diconファイル差し替え】
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
<components>
    <include condition="#ENV == 'ut'" path="warmdeploy.dicon"/>
    <include condition="#ENV == 'ct'" path="hotdeploy.dicon"/>
    <include condition="#ENV != 'ut' and #ENV != 'ct'" path="cooldeploy.dicon"/>
 
    <component class="org.seasar.framework.container.factory.SimplePathResolver">
        <initMethod name="addRealPath">
            <arg>"ccc.dicon"</arg>
            <!-- ccc.diconの代わりにddd.diconが差し込まれる -->
            <arg>"ddd.dicon"</arg>
        </initMethod>
    </component>
</components>