gpt4 book ai didi

java - 使用 AspectJ 递归

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:22:57 24 4
gpt4 key购买 nike

我是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com