menu
書いてる野郎
orebike@gmail.com
public class Config{ public String CONFIG_STRING; public boolean CONFIG_BOOL; public int CONFIG_INT; public long CONFIG_LONG; public double CONFIG_DOUBLE; public List<String> CONFIG_LIST; }
この名前は適当、なんでもいい
設定ファイルconfig.dicon
を作る。これはdiconファイルなのでenv.txtで環境別に切り替えられるという強みがある。
<?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="config" class="hoge.piyo.fuga.Config" instance="singleton" autoBinding="auto" > <property name="CONFIG_STRING">"hogehoge"</property> <property name="CONFIG_BOOL">true</property> <property name="CONFIG_INT">100</property> <property name="CONFIG_LONG">100L</property> <property name="CONFIG_DOUBLE">100.001D</property> <property name="CONFIG_LIST"> {"hoge", "piyo", "fuga"} </property> </component> </components> </xml>
ここでそれの値をOGNLのリテラルで記述する
このファイルを app.diconとかで
<include path="config.dicon"/>
な感じで読み込む
設定を使いたい場所に
@Resource public Config config;
のように書いてDIコンテナに突っ込んでもらう。
ActionやServiceの基底クラスに書いておくといいだろう。
この方式のいいところは、テストの時だけテストメソッドの中で値を入れ替えてしまえることだ。 テストは引数と戻り値で検証したいところだが、設定を外部から読むとそれがコントロール不能だとテスト性が落ちる。
逆に実行中にも書き換えられるのだが、これはやるなでいいだろう