1-3 Searsar2について

1-3-1 Searsar2の特徴 〜易しく優しくJ2EE

S2の特徴的な機能
  • AOP機能
  • インターフェース重視の自動設定
  • 設定ファイルのオブジェクト操作にOGNLを利用
  • HttpServlet、HttpSessionのサポート

1-3-2 AOP機能(S2AOP)

AOPとは何か

関心事の分離
「本質的関心事(Core Concern)」と「横断的関心事(Crosscutting Concern)」
AOPでは

  • クラスの実装から「横断的関心事」を除去する、
  • そのクラスの"外側"から機能を織り込むことで横断的関心事を実現する

インターセプター(横断的関心事の実装=織り込む処理自体)
インヴォケ−ション(織り込める場所)
ポイントカット(織り込める場所を選択すること)
アスペクト(インターセプタとポイントカットの組み合わせ)

S2AOPの特徴

S2のサポートするAOP形態:MethodInterceptor
インボケーションはメソッドの呼び出しから終了まで覆う
ポイントカットとしてメソッド名を選択するのでメソッドのラッパーと考えられる

メソッドの呼び出し情報で
使えるものは対象オブジェクトのクラス情報および呼び出されたメソッド名、引数、戻り値、発生した例外
これらを利用して以下の様なことが出来ます

  • メソッド呼び出しの前後でトレースログ出力
  • 引数の不備による例外
  • 実行時の例外をキャッチし戻り値を返す
  • インターフェースの実装として振舞う
標準で用意されているインターセプター
  1. TraceInterceptor
    • メソッド名と戻り値をログ出力
  2. ThrowsInterceptor
    • 指定した例外をキャッチして処理を行う
  3. MockInterceptor:
    • 抽象メソッドにモック用の簡単な実装を持たせることが出来る。ユニットテストで利用。
  4. DlegateInterceptor:
    • 設定した抽象メソッドの呼び出しを他コンポーネントの同名メソッド呼び出しに置き換えることが出来る。
  5. PrototypeDelegateInterceptor:
  6. SyncInterceptor:
    • 任意のコンポーネントのメソッド呼び出しを同期呼び出し(同時に1つのスレッドのみ動作)にすることが出来る。
    • synchronizedで定義した場合と同じように扱える。
  7. InterceptorChain:
    • 複数のインターセプタを一纏めにして定義できる。

1-3-3 DI+AOPのメリット

オブジェクトの独立性
ソースコードから横断的関心事の排除
横断的関心事はコンポーネントとして実装、AOPで織り込む
DIコンテナの機能はインターセプタであるコンポーネントにも有効ですから
インターセプターを実装する再にもDIコンテナの恩恵が受けられる

1-3-4 その他の機能

1-3-5 Seasar2の使用例

簡易DIコンテナをSeasar2で置き換える

file:Main.java
file:address.dicon