我是 AspectJ 的新手,并且有一个问题,尽管有些研究我无法解决。我有以下关于银行的方面,该方面检查银行的余额是否在每次公共(public)方法调用后保持不变。
pointcut BankCheck(Bank bank): call(public * Bank.*(..)) && target(bank);
Object around(Bank bank): BankCheck(bank) {
int balance = bank.getTotalBalance();
Object result = proceed(bank);
if (balance != bank.getTotalBalance()) {
LOGGER.warn("The total balance of the bank is not equal.");
} else {
LOGGER.info("Ok");
}
return result;
}
问题是在这方面我使用了方法 bank.getTotalBalance() ,它本身就是一个公共(public)银行方法。因此,每次都会建议这个方面,并且这个递归问题一直持续到抛出异常为止。有没有办法解决这个问题,例如关闭方面内的建议机制?
最佳答案
试试这个:
public aspect BankTotalBalanceAspect {
pointcut BankCheck(Bank bank): call(public * Bank.*(..)) && target(bank);
Object around(Bank bank): BankCheck(bank) && !within(BankTotalBalanceAspect) {
int balance = bank.getTotalBalance();
Object result = proceed(bank);
if (balance != bank.getTotalBalance()) {
LOGGER.warn("The total balance of the bank is not equal.");
} else {
LOGGER.info("Ok");
}
return result;
}
}
关于java - 使用 AspectJ 递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7214003/