Spring DIとは何か


1.DIとは何か

Spring Framework」(以下、Spring略)は、Java/J2EEで利用可能な汎用フレームワークです。
Strutsに代表されるような、Webアプリケーション全体の構築に関係する機能も提供する、かなり広範囲をカバーする本格的なフレームワークです。
これはRod Johnson氏の著書である「Expert One-on-One J2EE Design and Development」によるコードを元に開発されたオープンソースのフレームワークで、現在、「www.springframework.org」にて配布されています。
 既にStrutsやJSFといったWebアプリケーション全般に関するフレームワークを取り上げているのに、なぜまたSpringをというものを取り上げるのか。StrutsやJSFをなくしてSpringに移行しろということなのかと思った人もいるかもしれません。が、これは少し違います。
Springは、StrutsなどのようにWebアプリケーション全体に関するフレームワークですが、しかし「Struts」に置き換わるものではありません。むしろ、StrutsやJSFを使っている人にこそ勧めたい。

 では、Springとはどういうものなのか。その最大の特徴は「DI」と呼ばれる機能に集約できます。
DIとは「Dependency Injection」の略で、一般に「依存性の注入」などと呼ばれています。依存性とは、すなわち「オブジェクト外の要素を必要とするさまざまな処理や設定」と考えればいいでしょうか。
DIは、オブジェクトを生成する際に外部から必要な情報を注入する、という考え方。これによりオブジェクトに含まれるさまざまな依存性を切り離すことができる。

<概念>
クラス ⇒(オブジェクトを生成) インスタンス
    ↑
   DI情報(属性)

 例えば、あるクラスを定義するときに、そこから別のクラスのインスタンスを生成し、その中の処理を呼び出すような作業を考えましょう。Javaの世界では、こうしたことはよくあることですね。
こうした処理は、当たり前ですが呼び出される側のクラスが用意されていなければ動かすことができません。

 非常に大掛かりな開発で、数多くのクラスが定義され、それぞれ連携して動作するようなプログラムを想像して下さい。このうちの特定の機能を実現するクラスの開発ができました。さっそくテストをしてみよう..。という時、その内部から別のクラスを呼び出して処理するようになっていたとすると、その「呼び出される側のクラス」が完成していないとテストはできないことになります。要するに、関連するオブジェクトすべてがきちんと機能する状態になって初めてテストを行うことができるようになるわけです。
それらが揃っていないと、テストさえ満足にできません。それどころか、コンパイルさえできないでしょう。

 この問題は、特にJ2EEの「EJB(Enterprise JavaBeans)」などを利用する際に重要になります。EJBは非常に大規模なフレームワークです。これを使ったプログラムは、テストで動かすだけでも起動時間、消費するリソース、デプロイ作業など面倒で時間と手間のかかるものです。これらを動かして修正し...とうのは実に大変な時間のかかる作業です。
 こうした大変さは、要するに「クラスの中に、他のオブジェクトに依存する処理が含まれている」ために生じる問題です。そこで、「外部のオブジェクトに依存する部分を中に含めず、実行する際に外部から注入する」仕組みとして考え出されたのが「DI」です。
 Springでは、オブジェクト側の依存性をXMLとして記述します。これにより、クラスを外部に依存しないPOJO(Plain Old Java Object)として作成することができます。これは依存性を含まないのでそれだけテストし動かすことが可能です。
※POJOとは「単純な古きJavaオブジェクト」の意味で、要するに何の特殊性もない、もっとも一般的な Javaのクラスとして定義されるクラス。
このDIという手法は「単純化、軽量化」という大きな流れを生み出しました。









最終更新:2006年12月24日 18:57
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。