ひがやすを技術ブログ

電通国際情報サービスのプログラマ

S2 AOPの速報です。キーとなる概念、インターフェースは次の4つです。
AroundAdvice:プログラム中に挿入されるコードを表します。
Joinpoint:プログラム中に特定のコードを挿入するポイントを表します。
Pointcut:プログラム中のどこに特定のコードを挿入するのかを定義します。
Aspect:プログラムに適用する関心を定義します。
実際にオブジェクトにAspectを適用するには、次の様にしてAopProxyを使います。


Date target = new Date();
AroundAdvice advice = new AroundAdvice() {
public Object invoke(Joinpoint jp) throws Throwable {
System.out.println(jp.getTargetClass().getName() + "#" +
jp.getMethod().getName() + " invoke");
return jp.proceed();
}
};
Pointcut pointcut = new PointcutImpl(new String[]{"getTime"});
Aspect aspect = new AspectImpl(advice, pointcut);
AopProxy aopProxy = new AopProxy(target, new Aspect[] {aspect});
Date proxy = (Date) aopProxy.create();
targetはAspectを適用するオブジェクトです。
Joinpointからターゲットとなるオブジェクトやメソッド、引数などを取得できます。
Joinpoint.proceed()で次のAdviceが呼び出されたり、実際のメソッドが
呼び出されたりします。
PointcutImplのコンストラクタで、対象となるメソッドを指定します。
AopProxyのコンストラクタに、ターゲットと適用されるAspectを指定し、
create()を呼び出すことで、Aspectが適用されたProxyオブジェクトを取得できます。
バイトコードの書き換えには、cglib2を使ってます。