DBFluteの対応DIコンテナ in 0.9.2

@DBFlute, Java, Seasar, Spring, Lucy, Guice

最新のDBFlute-0.9.2でお話をします。
DBFluteの対応DIコンテナは以下の通りです:

Seasar(S2Container) (2.4系)
Spring Framework (2.5系)
Lucy (0.5)
Guice (1.0)

これらは、basicInfoMap.dfpropの「targetContainer」にて指定します。
EMechaであれば、ドロップダウンリストで選択可能(Guiceまだ不可)です。

もちろん、実績は圧倒的に「Seasar(S2Container)」です。
他のコンテナとの連携の実績はこれからってところでしょうが、
そもそも今、コンテナに依存している部分がDBFluteとして
かなり少ない(少なくなった)ので、動作に関してはほどんと問題は
ないかと思います。Exampleのテストも全てグリーンです。

それぞれのDIコンテナと連携したExampleたち:
dbflute-basic-example (Seasar)
dbflute-spring-example (Spring)
dbflute-lucy-example (Lucy)
dbflute-guice-example (Guice)

かなり特殊なパターンの考慮ですが、
全く別の世界のコンテナと連携するような場合とか、
そもそもアプリでDIコンテナを使わない(意識しない)場合は、
選択したDIコンテナはDBFluteインスタンスを管理するためだけの
内部コンテナとすることで、DBFluteを利用できるかと思います。
そのときのDIコンテナはGuiceが良いかもしれません。
依存ライブラリが一つとシンプルで設定ファイルもないためです。
Injectorクラスを保持するシングルトンな独自クラス作って、
Behaviorインスタンスを提供するようにするのがよいかと思います。
// = = = = = = = = = = = = = = = = = = = = = = = = =
// BehaviorFinder is your original class.
// She has the instance of Injector and provides behaviors.
// = = = = = = = = = = = = = = = = = = = = = = = = =
MemberBhv bhv = BehaviorFinder.find(MemberBhv.class);
MemberCB  cb = new MemberCB();
cb...
List<Member> memberList = bhv.selectList(cb);
// BehaviorFinder
private static Injector injector;
public static void initialize(DataSource dataSource)
    if (injector != null) { throw new IllegalS...("..."); }
    DBFluteModule module = new DBFluteModule(dataSource);
    injector = Guice.createInjector(module);
}
public static <BHV extends ...> BHV find(Class<BHV> type) {
    if (injector == null) { throw new IllegalS...("..."); }
    return injector.getInstance(type);
}
余談ですが、他のDIコンテナ対応してて思ったのは、
Seasarトランザクションやコネクションプール周りが
とても強いなと感じました。随分助けられてたんだなぁと
他のDIコンテナ触ってて実感しました。