かずきのBlog@hatena

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

アラウンド!

beforeやafter(returningを取ると例外が出ても実行してくれるみたい)のほかにもaroundっていうものがある。
これが一番あれこれ出来て面白そうに感じる今日この頃。

aroundの書き方はこんな感じ

戻り値 around(引数) : ぽいんとかっと {
  挟み込みたい処理
  proceed(引数); // 本来の処理実行
  挟み込みたい処理
}

proceedを呼ばなければ、もとの処理は行われない。
もう好きにして!!って感じだ。


aroundを使ってHelloWorldを書くとこんな感じになる

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");
//	}
	
	void around() : sayHello() {
		System.out.println("around Hello world");
		proceed();
		System.out.println("around Hello world");
	}
}

出力してるメッセージは違うけど気にしない!!
実行結果はこうなる。

around Hello world
Hello world
around Hello world