前回の『完全攻略O/Rマッピング』から、今度は『DIコンテナ完全ガイド』です。また、JavaWorld.jpに「先進DIコンテナ「Apache Geronimo」、「HiveMind」を試す」を掲載しました。
既にDIコンテナが主流となった時期の記事だけに内容には気を使ったつもりです。題名はDIコンテナ…ですが、実際にはDIそのものに注目しています。DIコンテナをつかってアプリケーションを開発しよう、、、みたいなスタンスではなく、もっと概念的なものを紹介しました。DIの現在だけでなく、DI開発の未来の姿を垣間見ていただければ幸いです。
PART1 基礎編「DIコンテナ、初めの一歩」
昔ながらのアプリケーションをDIに適合させていくプロセスを追いながら、DI対応型アプリケーション設計を紹介します。既に多くの方がDIコンテナの概念はご存知でしょう。しかし、そんな方でも、初めてDIコンテナを使うとなると落とし穴にはまりがちです。それは、
DIコンテナでは、制御可能ではない依存性を扱うことはできません。つまり、DIコンテナを用いた開発では、DIコンテナが依存性を扱えるようにアプリケーションを設計することが重要なのです。
ということです。そんなに難しいことではないのですが、コンポーネントに分解するクセというのが重要な気がしています。
なお番外編として、IoCタイプを紹介するコラムをつけました。Dependency Lookup(依存性の参照)、コンテキスト型Dependency Lookup、Dependency Injection(依存性の注入)と、IoCの歴史を追っています。IoCタイプというくくりでまとめると、DIがコンロブスの卵であったなぁ、そして、IoCタイプを目的ごとに使いわけているなぁと気づかされます。
PART2 プロダクト研究編「Spring & Seasar2」
SpringとSeasar2を比較するというチャレンジングなパートですw。第3者的な立場で両者の思想を追っています。前回のO/Rマッピング・ツールと同じなのですが、プロダクトの持っている思想を理解することで、自分の好み、あるいはプロジェクトの特性にあわせたプロダクト選択が出来ます。これは非常に重要なことです。特にSpringとSeasar2は大きく違います。どっちが良い・悪いということではなく、これは思想の違いなのです。そこで、両者の設定ファイルの書き方を比べながら比較を行っています。
記事の最後でSpringとSeasar2を"ある関係"に例えているのですが、事前にひがさんとお話したときには「面白い視点ですねぇ」というコメントをいただきました。この号にはひがさんとロッド・ジョンソン氏の対談も載っています。そちらも合わせてどーぞ。
番外編として次世代DIコンテナGeronimoとHiveMindの紹介コラムも掲載してあります。そしてなんと、オンラインのJavaWorld.jpに、雑誌よりも詳しくGeronimoとHiveMindを紹介した姉妹記事「先進DIコンテナ「Apache Geronimo」、「HiveMind」を試す」を掲載しました(実は書きすぎて雑誌に載らなかったからオンラインに載せたのは秘密です)。Geronimoも面白いのですが、HiveMindは非常に興味深いです。オンラインの記事ではサンプルコードも公開しています。ぐりぐりいじって、その可能性を考えてみてください(ちなみに、僕の感想は「面白いけど、これは何に使えばいいのだろう?」ですw)。
PART3 活用テクニック編①「モックを活用した単体テスト」
DIコンテナを使うメリットの1つはテスト容易性の向上でしょう。そのために重要なのがモックの概念です。手書きのモック、EasyMock、jMockという3つの手法を用いて、1つのアプリケーションのテストを行います。
この3つの手法も、どれが良い・悪いということではありません。それぞれの特性を知り、それぞれに向く方法で使い分けることで、ぐっとテストが楽になるはずです。
PART4 活用テクニック編②「DIベース開発の先進テクニック」
AOP機構を活用した例としてSpringのAcegi Secuirty(Spring Security)の使い方を、イベント・リスナ機構を活用した例としてSpringとMuleの統合を紹介しています。どちらもDIコンテナを有効に活用した例だといえます。
Scegi Securityは、セキュリティ・コンポーネントのデファクト・スタンダードと呼んでもいい感じがしてきました。今すぐに使えて有効なプロダクトです。
一方のMuleはESBツールです。ESB・SOA系はDIコンテナと非常に高い親和性を持ちます。DIコンテナにおけるイベント・リスナ機構の使いこなしは注目の手法でしょう。あえてJMSなんて使っていますが、JMSをまったく知らなくても簡単に実装できることに驚かれるはずです。
DIを使った開発は初期の盛り上がりを越えて次の段階に入ったといってよいでしょう。新しいDI対応アプリケーションはどうなるのかを知りたい方はぜひ御覧ください。コメント、文句、もっと説明せい、など受け付けています。トラバ、コメント、メールなどお願いします。
謝辞:編集はJavaWorld編集部 編集長の名須川さんです。提出遅延、ページ数オーバーにも関わらず、すばらしい記事に仕上げていただいたことを心から感謝いたします。
![]() | 月刊JavaWorld (ジャバ ワールド) 10月号 [雑誌] Amazonで詳しく見る by G-Tools |

