最近DIコンテナが雨後のたけのこのように登場しています。.NETにもSeasar2とかSpringがありますね。Javaでは比較的よく使われる技術なので、是非抑えておきたい技術なのですが、有名どころを列挙すると、
- Seasar2
- Spring Framework
- HiveMind
- PicoContainer
- JBoss Microcontainer
- Guice
- LiQ Container
- 他
と、色々あります。
実は最近仕事が落ち着いてきたのでDIコンテナ作りを再びやろうかなと思っています。実は以前に4回ほどDIコンテナを作成していて、公開せずに捨てていたのですが、
- Springっぽい感じで、それらしいものが出来たが、気分的にイマイチなので捨てた。
- DSLが面倒なので、DSLに頼らないタイプに挑戦したが、使ってみるとかえって面倒なのでやめた。
- ガチガチのDSLを使用して、ほぼSeasar2と同等レベルまでのものを作ったが、同等ならSeasar2でいいし、気に入らないところが増えてきたのでやめた。(クラスの差し替えでリロード不要にしたり、コンポーネントの登録をワイルドカード対応したりと、色々気合が入っていた)
- 3の改良版を作りかけていたが、忙しくて放置。取り合えずこれまでの成果を個別のライブラリとして切り出すだけにした。
と、色々作った経験があります。
今度はDSLを持たないDIコンテナを作ろうかなと思っています。DSLといっても大体XMLでスキーマ定義して、設定を読み込んで、バリデーションして、オブジェクトとバインドして・・・と本来の処理以外が色々と面倒なわけですが、それらはもう時代遅れじゃないかなと思っています。Guiceに近いアプローチですね。コンテナ非依存型のダイナミックAOPエンジンは既に作ってあるので、コンテナ部分だけ作りこめばいいのかなという感じです。