Spring概要

Spring frameworkについて

Spring frameworkとは、DIという機能を提供するフレームワークです。
DI(Dependency Injection)は、「機能を部品化し、設定ファイルで部品間の関係を設定することでアプリを作成することができる機能」です。
詳しくは、次のページで見ていこうと思います。
 
さて、DIは部品間の関係を設定するだけで、部品は各自で作成しないといけません。
しかし、Springは部品をいくつも用意してくれています。
その部品はサブプロジェクトとして複数立ち上がっています。
ここでは、簡単に各サブプロジェクトを紹介しようと思います。
基本的にはそれぞれの概要を日本語に翻訳しただけですが、付加情報があればプラスαしていきます。
 
 
 
【プロジェクト一覧 (左側のリンクを押すとさらに詳しい説明(日本語)に進みます)】
 名称
概要 
 Spring Core  Spring Coreは、DIなどのSpringのコア機能です。Spring 2.5まではSpringの一番コアな機能はDIでした。
Spring 3.0になってからは、Contextファイル内で使用できるSpEL式などの目玉機能が追加されています。
 Spring Test  Springを使用したテスト方法を提供します。
例えば、TomcatのフィルタのMockやHttpRequestのモックの提供などから、
Springの設定ファイルを簡易に読み込み、設定したbeanを取り出すための仕組みをもっています。
 Spring MVC SpringのWEBフレームワークです。
SpringのDIコンテナとアノテーションで構築していくタイプです。パラメタ、ヘッダ、メソッド、URIテンプレートなど様々な情報を簡易に扱える特徴があります。
流行のRESTも簡単に実装できるようです。
 Spring Web Flow
 Spring Web Flowは、Webの画面遷移や状態などを設定ファイルにより定義することができる機能のようです。使用したことが無いため、どのようなメリットがあり、弱点があるのか分かりません。すみませんです。
 Spring BlazeDS Integration
 Adobe Flexを使用したRich Webを提供する機能のようです。 
 Spring Securityは、Web画面のログイン認証・アクセス権限を設定のみで実現できます。
また、Javaのクラスに対してアクセス権限を使用することもできるようです。Web以外の通常のアプリケーションに対しても使用可能なようです。
 Spring Dynamic Modules
 OSGiを簡単に使用できるようにする機能のようです。
OSGiは、再起動なしに、動的にJavaのクラスを後から追加できる機能のようです。使用したことが無いのですみません。
 Spring Batchは、バッチ処理を実現できます。コミット数、ファイルの読み込み、処理の実行順番などを設定だけで実現できます。
他にも並行処理、スキップ、リスタートなどかなり色々できます。
 Spring Batch Admin  Spring Batchで実行したジョブの管理をすることができるようです。
具体的には実行履歴を見たり、実行中のジョブを停止・リスタートしたり、abondon状態にしたりできるようです。ユーザインターフェースは、WEBです。
 Spring Transaction  DBのトランザクションを設定ファイルの記述のみで行うことができるようになります。
また、try~catchなどでSQLExceptionをキャッチするコードを記述する必要がなくなります。
 Spring DIxAOP  AOPを設定のみで簡単に使用できるようにする機能です。AOPはJavaのソースを触ることなしにコードを埋め込む機能です。AOP機能のイメージは、Javaのバイナリのロード時に他のコードのバイナリを埋め込むようなイメージです。 
 Spring Remote  Spring Remoteは、リモートサービスを提供します。リモートサービスとは、「RMI」、「SOAP」などのWEBサービスなどのサービスを指しています。
通常コーディングすると、かなり面倒になりますが、この機能を使用することでかなり簡単になります。
 Spring Modules  Spring Modulesは、妥当性チェックを行うための機能です。CommonsValidatorやvalang、アノテーションを使用する方法の3つが主に用意されているようです。
2011年10月現在、Spring Modulesの開発は終了したようで、本家のHPからもリンクがなくなっています。少し前に他のプロジェクト(Spring Extensions)のおかげてあまり価値がなくなった、というようなことが書かれていました。ですので、他のプロジェクトで代替できるのではと思い、本家のHPの情報を収集中です。情報不足で、すみません。
 Spring Integration
 Spring Integrationは、よく知られるEnterprise Integrationパターンをサポートする機能を提供してくれるようです。
このパターンは、インターフェースがまばらな複数のシステム同士でも効率よく統合(Integration)する一般的な概念です。この概念では、入口と出口がありますが、その間に、メッセージ送信処理、メッセージを溜め込んだり、あるタイミングで次に送ったりするチャネル処理、メッセージをどこに送るかを決めるルータ処理、変換をかけるトランスフォーム処理、があります。これらの処理を通る間に目的の複数のシステムの統合を実現します。Spring Integrationはこのパターンに則して作られたフレームワークです。
Spring Integrationでは例えば、XMLやJSONを返すWEBサービスとバッチ処理とを結びつけたり、もしくはRMI、FTP/SFTP、HTTP、Twitterなど様々なシステムと統合できるようです。
 Spring AMQP
 AMQPベースのメッセージソリューションをSpringで使用できるようにしてくれるようです。
通常、Springは各機能を抽象化しますが、同様にAMQPのメッセージの送受信のためのオブジェクトも高度に抽象化して提供してくれるようです。
 Spring Gemfire
 GemFireを使用しやすくしてくれるようです。
GemFireはオンメモリで実現するDBのようなもののようです。つまり高速なDBという位置づけのようです。ただしSQLを使用してデータ操作をするのではなく、put(キー名, データ)のような操作でMapのように操作します。Mapとの違いは、他のサーバに同時に読み書きできたり、負荷が高いときには分散したり、逆に負荷が低いときは縮退させたりできるようです。また、後でファイルベースのDBに書き込むこともできるようです。
ですので、イメージとしてはAPとDBの仲介者といったイメージかも知れません。
DBサーバが1台しかなくても仲介者(GemFire)のサーバを増やすことで負荷分散や高速化ができるので、DBのライセンスやハードディスクの数を減らせるといったメリットもあるようです。
2010年現状ではput()によるデータアクセスの他にOQLというSQLもどきの言語によるアクセスもあり、今後はSQLも使用できるようにする予定があるようです。
証券会社などのマイクロ秒単位のレスポンスが必要なときに使用されるようです。
 Spring Roo
 少しのコマンドを打つことで、関連するプログラムを自動で記述してくれる機能のようです。
使用したことはありませんが、まだ使い勝手はよくないようなお話をきいたことがあります。
 Spring Data
 リレーショナルでないDBや、クラウドのデータサービスのような技術に対しても簡単にアクセスすることを主目的とした機能のようです。OracleのようなリレーショナルDBやJavaのGenericベースのDAOに対する付加的なサポートも目的としているようです。
 Spring Social
 この機能を使用すると、twitterやFaceBookのような様々なソーシャルサイトに対して相互連携することができるようになるようです。これも使用したことがないのですみません。
 
 
 
 
 
 
 Created Date: 2010/11/27
Comments