使用AspectJ进行递归

Jor*_*ees 6 java aspectj

我是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方法.因此,每次都建议使用该方面,并且此递归问题一直持续到异常被抛出为止.有没有办法解决这个问题,例如关闭方面内部的建议机制?

Con*_*ner 4

尝试这个:

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)