かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

ポイントカット

さて、さっきのHello worldを書いてて思ったけどめんどくせ〜!
何がって、public void org.okazuki.aspectj.hello.HelloWorld.sayHello()っていっぱい書くのが。
何かパッケージ名は、同じパッケージにいるかimportしてる場合は省略可能らしい。
早く教えてよ!!


まぁ、それでも二箇所に同じことを書くのはめんどくさいわけで。
そんなときのために、何処に割り込みをかけるのかを事前に定義しておける。
それがpointcutっていうのかな。

定義の仕方はこんな感じ

pointcut 名前() : 何処か;


さっきのHelloWorldだと

pointcut sayHello() : execution(public void HelloWorld.sayHello());

になる。

定義したpointcutは、afterやbeforeの後に書ける!
つまり、さっきのHelloWorldAspectはこうなる。

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");
	}
}

多少楽になったね。