前の日記で書いたAspectJのハローワールドをアノテーションを使ったものに書きかえてみた。
書き換え前
package org.okazuki.aspectj.hello; public aspect HelloWorldAspect { pointcut sayHello() : execution(public void HelloWorld.sayHello()); before() : sayHello() { System.out.println("before Hello world"); } after() returning() : sayHello() { System.out.println("after Hello world"); } }
書き換え後
package org.okazuki.aspectj.hello; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; @Aspect public class AnnotationAspect { @Pointcut("execution(public void HelloWorld.sayHello(..))") public void sayHello() { } @Before("sayHello()") public void before() { System.out.println("before Hello world"); } @After("sayHello()") public void after() { System.out.println("after Hello world"); } }
Aroundのほうも
書き換え前
package org.okazuki.aspectj.hello; public aspect HelloWorldAspect { pointcut sayHello() : execution(public void HelloWorld.sayHello()); void around() : sayHello() { System.out.println("around Hello world"); proceed(); System.out.println("around Hello world"); } }
書き換え後
package org.okazuki.aspectj.hello; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; @Aspect public class AnnotationAspect { @Pointcut("execution(public void HelloWorld.sayHello(..))") public void sayHello() { } @Around("sayHello()") public void around(ProceedingJoinPoint joinPoint) throws Throwable { System.out.println("around Hello world"); joinPoint.proceed(); System.out.println("around Hello world"); } }
完璧にJavaになってる!ってのが嬉しいところ。
ただ、pointcutを定義するときにIDEのコード支援を使わないと書けない体なのでちょっと辛い。
@Pointcut()までうって括弧のなかでコード支援使ってexecution ....を書いてから、""でかこって文字列にしよう。
それが楽。