目次 > 第1章 概要 > 1.6 Springフレームワーク概略
1.6 Springフレームワーク概略
Springフレームワーク概略
- DIコンテナをベースにしたJava/JavaEEアプリケーション向けのフレームワーク。
- AOP/JDBC/MVCフレームワークなどの様々な機能が備わっている。
- プレゼンテーション層・サービス層・永続化層など全ての層をカバーする。
- 個々のモジュールは独立で利用可能なため、必要なモジュールのみ導入可能。
- 既存技術との親和性が高い。
■ Springフレームワーク概略
(1) DI コンテナとは
依存性の注入(Dependency Injection)と呼ばれる技法で、オブジェクトのライフサイクルや依存関係の管理機能を備えた実行基盤(コンテナ)のことを表す。
DIコンテナの役割
- オブジェクトのインスタンス生成
- オブジェクトAがオブジェクトBを使用する際にインスタンスをnewする必要がなく、DIコンテナがオブジェクトBのインスタンスの生成を行い、そのインスタンスを使用するオブジェクトAのセッターに設定してくれる。
- オブジェクトのシングルトン管理
- Bean定義ファイルでオブジェクトに対してシングルトンの宣言を行うだけで、コンテナはそのオブジェクトをシングルトンとして管理する。
- ライフサイクル管理機能
- オブジェクトの生成・破棄のタイミングでメソッドを呼び出し、処理を実行させることができる。
- オブジェクト間の関連制御機能
DIコンテナのメリット
DIコンテナを使用することで、クラス間を疎結合に保つことが可能となり、以下のメリットが生まれる。
- メンテナンス性の向上
- オブジェクト同士はインタフェースで関連付けられ、Bean定義ファイルで実装クラスを切り替えることができる。実装クラス同士の依存度が低下するため、ロジック変更やコンポーネントの差し替えに対してその影響範囲を極小化できる。
- テストの容易性
- モックを利用したテストが行えるため、単体試験でのテスタビリティが向上する。
- 再利用性の向上
- SpringAPIに対して依存の少ないオブジェクト設計が可能。
- コンポーネントはPOJO(通常のJava クラス)であり、EJBなどの特定のAPIに依存しないため再利用できる機会が増える。
(2) AOP(アスペクト指向プログラミング)とは
オブジェクト指向プログラミング(OOP)を補完する技術として生まれたものである。
AOPでは、ログ出力のような、あらゆるモジュールに横断的に散在する処理を分離することができる。
OOPの問題点
オブジェクト指向プログラミング(OOP)での問題点として、各モジュール内に別モジュールを呼び出す処理が散在してしまうことがあげられる。 AOPを使用することで、ソースコードに手を加えることなく、任意の処理を実行時またはコンパイル時に組み込むことができる。
AOPの利用例
代表的な例として、以下の処理が挙げられる。
- ロギング処理
- プログラムの欠陥の原因を突き止めるため、処理の経過を記録(ロギング)する。ロギングするということは、プログラムの複数箇所(各クラスの各メソッド)にその命令を追加する必要があり、またプログラムの書き換えは最終的に手作業となる。これにより、同じような処理が複数箇所に分散する。後になって集めたい情報が増えたり、処理が不要になったりすると、それに合わせてすべての場所を変更する必要があった。
- トランザクション管理
- EJBの代表的な特徴である宣言的なトランザクション制御を、AOPを利用することで可能とする。宣言的トランザクションを行うことで、開発者からトランザクションの開始、終了を隠蔽することができる(ビジネスロジック開始時にトランザクションを開始し、終了時にコミットさせ、例外時はロールバックを行うような処理を、容易にフレームワークに任せることができる)。
他にもAOPの使用が有効だと思われる例として、以下の処理が挙げられる。
- 例外処理
- メソッドの実行時間が閾値を超えたらログに書き出す
- セキュリティ管理
- 永続化
- モック
- メソッドの呼び出しをリモート化
- メソッドの呼び出しを同期化(synchronized)
- メソッドの呼び出しを非同期化
- メソッド呼び出しの委譲
(3) 既存技術との親和性
個々のモジュールは独立で利用可能なため、必要なモジュールのみ導入可能。
例えば、MVCフレームワーク部分をSpring Web MVC フレームワークを利用せず、Strutsを利用することが可能。ただしDIコンテナは必要(プログラムの実行基盤であるため)。
Springが各層で提供する機能
- DIコンテナ
- AOPフレームワーク
- MVCフレームワーク
- Web インテグレーション機能
- JDBC抽象化フレームワーク
- O/Rマッピングインテグレーション機能
■ 各層の提供機能
(1) プレゼンテーション層
Spring Web MVCフレームワーク
- Springが提供するプレゼンテーション層のフレームワーク
- アプリケーションコントローラとして以下のもので構成。
- アプリケーションコントローラであるコントローラサーブレット
- コントローラサーブレットから呼ばれるコントローラクラス
- 動作を制御する定義ファイル
- MVCのView として以下のものが利用可能。
- JSP&JSTL
- Velocity
- XSLT
- PDF/Excel
- コントローラクラスはユーザからの入力データをWeb コンテナに依存しないPOJOで取得でき、Webコンテナから分離された入力データの検証クラスを利用することが可能。
Spring Web インテグレーション機能
- Springを利用してプレゼンテーション層の設計・実装をする場合、必ずしもSpring Web MVCフレームワークを使う必要はない。
- Struts、JSFなどをWebプレゼンテーション層として利用することが可能(Server(Web)版では、プレゼンテーション層のフレームワークとしてStrutsを用いている)。
(2) サービス層
DIコンテナとサービス、ドメイン
- サービスおよびドメインはPOJOで実装される。
- コントローラは必ずDIコンテナを通してサービスクラスをインタフェースとして取得し、サービスロジッ
クを利用する。
- サービスクラスからデータアクセスの利用もDIコンテナからインタフェースを取得して行う。
AOP とトランザクション管理
- SpringはAOP機能を使用してPOJOにトランザクション機能を追加する。
(3) 永続化層
Spring JDBC抽象化フレームワーク
- Springが提供するJDBC抽象化フレームワーク
- JDBCを直接扱わない。
- SQL文を利用するタイプのデータアクセスフレームワーク。
Spring O/Rマッピングインテグレーション機能
- Spirngが提供するO/Rマッピングインテグレーション機能
- Hibernate、iBATISなどのO/Rマッピングツールが利用できる。