Morphia の DAO を Spring コンテナで生成する場合に、TypeConverter をどう設定するか? 一つの方法を示す。
ドメインオブジェクト
part 3 のときとほぼ同じクラスを使う。ただし、MongoDB のコレクション名は違うものにする。
AccountType については、
part 2 に示したものと同様の TypeConverter を使ってその値を小文字で保存する。
TypeConverter の設定方法
さて、
part 2 で示したように、Morphia.getMapper().getConverters() で取得した DefaultConverters オブジェクトに対して addConverter( TypeConverter ) メソッドを呼ばなければならない。しかし、DefaultConverters はセッターインジェクションもコンストラクタインジェクションもできない。
そこで、Morphia インスタンスを生成するファクトリクラスを作る。そのファクトリメソッドに TypeConverter を渡し、生成した Morphia インスタンスに addConverter して返す。
Spring の XML による設定は以下のとおり。
morphia2 はファクトリ Morphiafactory の2番目の create メソッドで生成される。さらに、morphia2 がファクトリとなって Datastore インスタンスを生成する。
AccountDAO と PersonDAO はパッケージ名以外
part 3 と同じ。
アプリケーションコード
DAO オブジェクトを生成し、エンティティを操作するコードは以下のとおり。上の XML がクラスパス上の app-context-2.xml ファイルに保存されているとする。