開発中のDIコンテナですが、リソースインジェクションとJMXに対応させました。
JMX対応はMBeanServerにコンテナとコンテナ内のコンポーネントを登録して、コンテナがどういう状態かを外部から監視する機能ですが、実際のところまだまだというところです。
- コンポーネントの属性変更
- コンポーネントの状態変更
- コンポーネントの操作
というコンテナやコンポーネントをJMXで管理する機能と、
- MBeanServerをコンポーネントとして登録する機能
- MBeanServerのMBeanをコンポーネントとして登録する機能
もサポートしたいところ。ダイナミックMBeanは流石に難しいですが、POJOベースのMBeanなら登録できそうです。
そして目玉となるのがリソースインジェクション機能です。
リソースとはプロパティファイルやデータベース等の<キー> = <値>で表現されるものを示しますが、これらをコンテナに登録しておき、コンテナ内のコンポーネントにインジェクションできるようにする機能です。
例えばvoid setUserName(String name);というメソッドがある場合、コンテナ内のリソースからuser.nameで検索して、値があればインジェクションします。セッターメソッドの第一引数の型情報からプロパティエディタ(java.beans.PropertyEditor)を検出してからインジェクションするので、プロパティエディタが見つからない場合は何も行われません。独自のプロパティエディタを作成して登録する事もできますので、好きな文字列から好きなオブジェクトの生成も可能です。(ここら辺はSpringのApplicationContextからアイデアをいただきましたw)
例えばImageエディタを作成して、Swingのコンポーネントにインジェクションするというのも可能になりますね。プリミティブ型や一般的なAPIにある型を、インジェクションの為にコンテナに登録するのは面倒なので、こういうアプローチもありだと思います。