Spring2.0.4のことはじめ

感想おまちしてます!

Spring
Frameworkはエンタープライズアプリケーション作成のために軽量なソリューションを提供してくれるフレームワーク。Springフレームワークを
りようすることで、AOPの導入や、DIというデザインパターンを使ってアプリケーションを構築することが簡単にできるようになる。

http://www.springframework.org/

AOPとは「Aspect Oriented
Program(アスペクト指向プログラム)」のことで、ソフトウェアの特定の振る舞いを「アスペクト」として分離し、モジュール化するプログラミング技
法。オブジェクト指向プログラミングの問題点を補うために考え出された手法。

(参考:日立システムズのページ

IoCとは「Inversion of Control(制御の反転)」のことで、この概念を実装したコンテナをIoCコンテナと呼んでいた。現在ではDI(Dependency Injection:依存性の注入)と呼ばれている。

制御の反転とは、以下のようなもの。

ライブラリを利用するだけのコードの場合、mainメソッドが初めに呼ばれて、
プログラムの制御は制御クラス等が握ることになる。
これは「ユーザのコードがライブラリを呼び出す」という構図になる。

フレームワークだとこの構図が逆になり、フレームワークで用意されている
クラス郡を肉付けし、配置し、設定ファイルを記述したりする。
フレームワークはそれらを元に、ユーザのコードを制御する。
これは「フレームワークがユーザコードを呼び出す」という構図になる。

フレームワークを使うことで、制御が反転しているのがわかる。ここではSpringなのだが、Strutsのようなフレームワークも、同じくIoCの概念に従っている言える。

「制御の反転」こそがフレームワークの本質であり,定義とさえ言えます。参考:ソフトウエアのフレームワークとはなにか by ITpro

逆にDIについてはFlex Coderさんに面白い例があった。

よくある車を使ったクラスの説明を使うと・・・

CarクラスはEngineインタフェースを実装している。これでCarクラスはEngineクラスに依存している。これを反転すると、Carクラ
スにはEngineクラスのアクセッサが用意されていて、外部からEngineクラスをセットできるようにする。すると、CarクラスはEngineクス
に依存しなくなる(依存はしているけど、Engineの持ち方が違う)。

SpringではこのIoCの発想によって、CarクラスにEngineクラスをセットする・・・という作業を行ってくれる。依存性を注入しているのがわかる。