我是AspectJ的新手,并且有一个问题,尽管如果我无法解决一些研究.关于银行,我有以下方面,方面检查每次公开方法调用后银行的余额是否成立.
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;
}
Run Code Online (Sandbox Code Playgroud)
问题是在方面我使用bank.getTotalBalance()方法,它本身就是一个公共Bank方法.因此,每次都建议使用该方面,并且此递归问题一直持续到异常被抛出为止.有没有办法解决这个问题,例如关闭方面内部的建议机制?
尝试这个:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1361 次 |
| 最近记录: |