AOPの設定の種類

Adviceの種類

今回の例では、AOPとして、あるメソッドの起動自体をラッピングする org.aopalliance.intercept.MethodIntercepter
implements しました。これは、メソッドの呼び出し前と 呼び出し後の両方に処理を追加できるタイプで、
Around Advice と呼ばれています。
他のAdvice の種類を下の表に列挙します。詳しい使い方は、他のサイトや書籍を参照いただきたいのですが、
本書の Login判定の改造を経験していれば、スムーズに理解できると思います。

Adviceのタイプ 特徴 implementsするinterface
Around Advice 対象メソッド実行の前後に処理を追加 org.aopalliance.intercept.MethodIntercepter
Before Advice 対象メソッド実行の前に処理を追加 org.apringframework.aop.MethodBeforeAdvice
After Returning Advice 対象メソッド実行の後に処理を追加
対象メソッドが例外をthrowすると、呼ばれない
org.apringframework.aop.AfterReturningAdvice
Throw Advice 対象メソッドが例外をthrowすると、呼ばる org.apringframework.aop.ThrowsAdvice

AOP対象メソッド名の記述

AOP対象のメソッドの指定は、id="crackerAdvisor"(「Advice」+「メソッド名」) と
id="loginCtrlAop"(「対象のBean名」「interface名」) で特定します
( 下記参照 )

ところで、メソッド名の .*handleRequest という表現は、どういう意味か分かりますか?
handleRequestはメソッド名として、前の .* は 1文字以上の任意の文字列という意味になります。
(正規表現です。)
おそらく、org.springframework.web.servlet.mvc.Controller.handleRequest という文字列と
一致する正規表現を書き込むのだろうと思います。

注意点としては、.handleRequest と書くと、正規表現的には 「何でも良い1文字」+ handleRequestに
なってしまい、ヒットしなくなるので注意してください。

CGLIB

最後に参考までですが、AOPの対象となるメソッドは、interface で定義しておく必要があると書きましたが、
CGLIBというjarライブラリを使うと、任意のメソッドも対象にできます。

実は管理人も、onSubmit()を CGLIB(cglib-nodep-2.1_3.jar) で呼び出そうとしたのですが、
CGLIBは、対象クラスが1つでも protected のメソッドを持っていると、上手く動かないようで、
適用を断念しました。