normalian blog

I will introduce about Microsoft Azure, ASP.NET or Java EE

AspectJを試してみる

簡単に自分用の備忘録。Java5からアノテーション導入されて、AspectJの記述が変わってますのでそれを含めて簡単にサンプル。

監視対象のクラスを作成する
public class AspectJMain {

	public static void main(String[] args) {
		User user = new User("岸本", "東京都北区");
		new UserDAO().regist(user);
		new MyUserDAO().regist(user);
	}
}
public class UserDAO {
	public void regist(User user) {
		System.out.println("ユーザー登録処理");
	}
}

public class AspectJMain {

	public static void main(String[] args) {
		User user = new User("岸本", "東京都北区");
		new UserDAO().regist(user);
	}
}
aspectクラス?を作成

行った処理は以下

  • @PointcutでAOP処理を挟むメソッドを指定する。
  • @Beforeで指定したAOP処理を挟むメソッドの前に実行される処理を記述
  • @Afterで指定したAOP処理を挟むメソッドの後に実行される処理を記述
@Aspect
public class FileLogger {
	@Pointcut("execution(* regist(User))")
	public void log(){}	
	@Before("log()")
	public void beforeAtLog()
	{
		System.out.println("ユーザー登録開始");		
	}
	@After("log()")
	public void afterAtLog()
	{
		System.out.println("ユーザー登録終了");
	}
}
実行

以上のクラスを全て同じデフォルトパッケージにて実行した

課題
  • パッケージ関連が絡むと何処に*.ajファイル(@Aspectなクラス)を置いたら良いか謎