DBFlute: 一括の初期化をするメソッド

DBFluteは内部的な初期化を起動時一括ではなく、最初のアクセス時に必要な分だけ初期化します(Lazy初期化)。こうすることで初期化が軽く特に初期化を繰り返すUT環境に向いています。

しかしながら:

テスター「あまりにSQLが遅いんだけど」
プログラマ「ああいや、最初の一回は初期化が走ってどうのこうの...二回目は速いです」

お客様「なんかこの画面遅くない?」
SE「ああ、最初のアクセスは色々内部で初期化どうのこうの...二回目は速いです」

結構、これに近いやりとりが現場ではあった気がします。内部コンポーネントの遅延初期化(最初のアクセス時にBehaviorを初期化)は、単体テストとかのときはとても良いけど、サーバプロセス付きの画面アプリ(要はWEB)とかの起動時は、その起動時に初期化してしまって、画面アクセス時は既に初期化されてて欲しいような気がします。

DBFluteでは、今までも初期化コスト減らすために色々工夫してきました。

 A. クラスではなくメソッド単位で遅延初期化
 B. BeanMetaDataの再利用方式化による初期化処理減らし

しかし、根本としては、上記のようなことではないかと思いました。(DBFluteの初期化コスト減らしはそれはそれでかなり価値があります)

なので次のDBFluteでは、以下の機能を追加します。

behaviorSelector.initializeConditionBeanMetaData();

これを実行すると、ConditionBeanのメソッドだけですが、関連する内部コンポーネント全てを一括初期化します。単体テスト(JUnit)の初期化では呼び出さないようにして、画面アプリ起動時にだけ実行される初期化処理で呼べば効果的です。

behaviorSelectorは、DIコンテナコンポーネントです。それぞれのDIコンテナのやり方に従うことでインスタンスを取得することが可能です。