目次 > 第1章 概要 > 1.5 Springフレームワーク概略

1.5 Springフレームワーク概略

Springフレームワーク概略

  • DIコンテナをベースにしたJava/J2EEアプリケーション向けのフレームワーク。
  • AOP/JDBC/MVCフレームワークなどの様々な機能が備わっている。
  • プレゼンテーション層・サービス層・永続化層など全ての層をカバーする。
  • 個々のモジュールは独立で利用可能なため、必要なモジュールのみ導入可能。
  • 既存技術との親和性が高い。

(1) DIコンテナとは

依存性の注入(Dependency Injection)と呼ばれる技法で、オブジェクトのライフサイクルや依存関係の管理 機能を備えた実行基盤(コンテナ)のことを表す。

DIコンテナの役割

  • オブジェクトのインスタンス生成・オブジェクト間の関連制御機能
    • オブジェクトAがオブジェクトBを使用する際にインスタンスをnewする必要がなく、DIコンテナがオブジェクトA、Bのインスタンスの生成を行い、そのインスタンスを使用するオブジェクトAのセッターに設定してくれる。
  • オブジェクトのシングルトン管理
    • Bean定義ファイルでオブジェクトに対してシングルトンの宣言を行うだけで、コンテナはそのオブジェクトをシングルトンとして管理する。
  • ライフサイクル管理機能
    • オブジェクトの生成・破棄のタイミングでメソッドを呼び出し、処理を実行させることができる。

DIコンテナのメリット

DIコンテナを使用することで、クラス間を疎結合に保つことが可能となり、以下のメリットが生まれる。

  • メンテナンス性の向上
    • オブジェクト同士はインタフェースで関連付けられ、Bean定義ファイルで実装クラスを切り替えることができる。実装クラス同士の依存度が低下するため、ロジック変更やコンポーネントの差し替えに対してその影響範囲を極小化できる。
  • テストの容易性
    • モックを利用したテストが行えるため、単体試験でのテスタビリティが向上する。
  • 再利用性の向上
    • SpringAPIに対して依存の少ないオブジェクト設計が可能。コンポーネントはPOJO(通常のJava クラス)であり、EJBなどの特定のAPIに依存しないため再利用できる機会が増える。

(2) AOP(アスペクト指向プログラミング)とは

オブジェクト指向プログラミング(OOP)を補完する技術として生まれたものである。
AOPでは、ログ出力のような、あらゆるモジュールに横断的に散在する処理を分離することができる。

OOPの問題点

オブジェクト指向プログラミング(OOP)での問題点として、各モジュール内に別モジュールを呼び出す処理が散在してしまうことがあげられる。
AOPを使用することで、ソースコードに手を加えることなく、任意の処理を実行時またはコンパイル時に組み込むことができる。

AOPの利用例

代表的な例として、以下の処理が挙げられる。

  • ロギング処理
    • プログラムの欠陥の原因を突き止めるため、処理の経過を記録(ロギング)する。ロギングするということは、プログラムの複数箇所(各クラスの各メソッド)にその命令を追加する必要があり、またプログラムの書き換えは最終的に手作業となる。これにより、同じような処理が複数箇所に分散する。後になって集めたい情報が増えたり、処理が不要になったりすると、それに合わせてすべての場所を変更する必要があった。そのロギング処理でAOPを利用することによってロギング処理を一箇所で管理することができる。
  • トランザクション管理
    • EJBの代表的な特徴である宣言的なトランザクション制御を、AOPを利用することで可能とする。宣言的トランザクションを行うことで、開発者からトランザクションの開始、終了を隠蔽することができる(ビジネスロジック開始時にトランザクションを開始し、終了時にコミットさせ、例外時はロールバックを行うような処理を、容易にフレームワークに任せることができる)。

他にもAOPの使用が有効だと思われる例として、以下の処理が挙げられる。

  • 例外処理
  • メソッドの実行時間が閾値を超えたらログに書き出す
  • セキュリティ管理
  • 永続化
  • モック
  • メソッドの呼び出しをリモート化
  • メソッドの呼び出しを同期化(synchronized)
  • メソッドの呼び出しを非同期化
  • メソッド呼び出しの委譲

(3) Springの提供機能

  • JDBC抽象化フレームワーク
    • Springが提供するJDBC抽象化フレームワーク
      • JDBCを直接扱わない。
      • SQL文を利用するタイプのデータアクセスフレームワーク。
  • Spring O/Rマッピングインテグレーション機能
    • Spirngが提供するO/Rマッピングインテグレーション機能
      • Hibernate、iBATISなどのO/Rマッピングツールが利用できる。

次節:1.6 バッチフレームワーク概略

Copyright (C) 2007 NTT DATA CORPORATION