java - 使用 AspectJ 递归

标签 java aspectj

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

相关文章:

playframework-2.0 - AspectJ 加载但忽略 Play Framework 2.2.x 中的类

Spring 4+方面

java - 非事务性方法也被代理调用,如何避免这种情况?

java - 嵌入式 Jetty (v9) 和 jetty-env.xml 创建奇怪的类加载器问题

java - AsyncTask和IntentService什么时候使用?

java - 跨项目应用程序中未显示 log4j 日志记录?

java - AspectJ:跟踪新对象初始化

java - 如何实现一个支持添加 O(1)、删除最大 O(logn) 的集合,反之亦然?

java - 您可以从 Java 调用 OpenSSL 的哈希原语吗?

java - 我想为具有给定值的 JPA 注释生成编译警告