Google
 
Web andore.com
Powered by SmartDoc

1. はじめに (Ver 2.0M2)

1.1 概要

Springには多くの機能や特徴が備わっており、これは下図に示した7つのモジュールにきれいにまとめられている。本章ではこの各モジュールそれぞれについて順番に扱う

Overview of the the Spring Framework

コアパッケージはこのフレームワークで最も基本を成す部分であり、ビーンコンテナ機能を管理できるようにする依存性注入(Dependency Injection)機能を提供する。この基本的な考え方はBeanFactoryであり、これはプログラマティックなシングルトンの必要性を廃し、プログラムロジックからコンフィグレーションと依存性の仕様を切り離せるようにしたファクトリパターンを提供する。

コアパッケージの上にコンテキストパッケージがある。これは、多少はJNDIレジストリに似ているフレームワークスタイルのやり方でビーンにアクセスする方法を提供する。このコンテキストパッケージはビーンパッケージからその特徴を継承しているが、例えばサーブレットコンテナによる、リソースバンドル、イベント伝播、リソース読み出し、透過的なコンテキスト生成を使ったテキストメッセージングのサポートが追加されている。

DAOパッケージではJDBC抽象化レイヤを提供する。これは退屈なJDBCコーディングやデータベースベンダ独自のエラーコードの解析をいらなくしたものだ。さらに、JDBCパッケージは宣言的トランザクション管理と同様に、特別なインタフェースが実装されたクラスだけでなく全てのPOJO(Plain old Java Object)をプログラマティックにする方法も提供する。

ORMパッケージは一般的なオブジェクトーリレーショナルマッピングAPIのレイヤを統合する。これにはJDO,HibernateやiBatisが含まれている。ORMパッケージを使うことで、前述した宣言的トランザクション管理のようにO/RマッパをSpringで提供されている他の機能と組み合わせて使えるようになる。

SpringのAOPパッケージではAOPアライアンスと互換性のあるアスペクト指向プログラミング実装を提供する。これによって、例えば、論理的言えば分離されるべき機能を実装したコードをきれいに切り離すメソッドインタセプタやポイントカットが定義できる。ソースレベルメタデータ機能を使えば、少しばかり。Net属性に似た、全ての種類の振る舞いに関する情報をコードに組み込むことができる。

SpringのWebパッケージでは、マルチパート機能やサーブレットリスナを使ったコンテキストの初期化や、Web指向なアプリケーションコンテキストのような基本的なWeb指向の統合機能を提供する。SpringをWebWorkやStrutsといっしょに使う場合は、このWebパッケージが統合を行うパッケージだ。

SpringのWeb MVCパッケージでは、Webアプリケーション向けモデル-ビュー-コントローラの実装を提供する。SpringのMVC実装は単に実装しただけではなく、ドメインモデルのコードとWebフォームをきれいに分離し、バリデーションのようなSpringの他の機能を全て使えるようにしたものである。

1.2 想定シナリオ

上述したブロック単位で、アプレットから羽毛がきれいにそろったエンタープライズアプリケーションまでSpringのトランザクション管理機能やWebフレームワークを使ってあらゆる種類のシナリオでSpringを使うことができる。

Typical full-fledged Spring web application

Springのほとんどの機能を使う典型的なWebアプリケーション。TransactionProxyFactoryBeansを使うと、Webアプリケーションには完全なトランザクションが実装され、これはエンタープライズJavaBeansで提供されるトランザクション管理されたトランザクションを使う場合とちょうど同じだ。自前のビジネスロジックは全てSpringのDependency Injectionコンテナで管理された単純なPOJOを使って実装できるようになる。メール送信やバリデーションのような付加的なサービスはウェブ層からは独立しているので、どこでバリデーションルールを実行するかを選ぶことができる。SpringのORMではHibernateやJDO,iBatisとの統合をサポートしている。例えばHibernateDaoSupportを使えば、既存のHbernateマッピングを再利用が可能だ。フォームコントローラはActionFormやその他のHTTPパラメータをドメインモデルの値に変換するクラスを使わずにシームレスにウェブ層とドメインモデルを統合する。

Spring middle-tier using a third-party web framework

現状によっては完全に異なるフレームワークへ移行できないことが時にはある。Springではその機能を全部無理に使わせるようなことはない。つまりオールオアナッシングなソリューションではないのだ。WebWorkやStruts,Tapestry,あるいは他のUIフレームワークを使った既存のフロントエンドが既にあってもSpringを使ったミドル層と完全に統合することができるので、Springの提供しているトランザクション機能を利用することが可能だ。やらないといけないことは、ビジネスロジックをApplicationContextを使って組み上げ、WebApplicationContextを使ってWeb UI層と統合するだけだ。

Remoting usage scenario

ウェブサービス経由で既存のコードにアクセスしないといけない場合はSpringのHessian-Burlap-Rmi-JaxRpcProxyFactoryクラスを使うことができる。既存のアプリケーションへのリモートアクセス可能にするのは、今はもう難しいことではないのだ。

EJBs - Wrapping existing POJOs

SpringではEnterprise JavaBeansへのアクセス層や抽象化層も提供されていて、宣言的なセキュリティを必要とするようなスケーラブルなフェールルセーフウェブアプリケーションで使えるように既存のPOJOやPOJOをステートレスセッションビーンにラップしたものを再利用できるようになっている。