簡単に自分用の備忘録。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なクラス)を置いたら良いか謎