我对让 BankAccount 类实现安全提款/存款功能有疑问。到目前为止,当您向bankAccount 类提款或存款时,它会打印日志。无论如何,我的问题是如何实现安全性,例如您提取的金额不得超过您银行帐户中当前的金额。如果我不允许在 BankAccount 类中实现该安全性,并且希望将其实现到 AspectJ。
我现在有以下内容。可以看出,无论 if 语句是真还是假,提款都会完成。因此我必须在else语句中存回这笔钱,这样它就不会变成负数。这可以用更好的方式来完成吗?
pointcut checking(BankAccount ba, float x):
call(* BankAccount.withdraw(..)) && target(ba) && args(x);
before(BankAccount b, float x) : checking(b, x) {
if(b.getBalance() >= x) {
System.out.println("Account changing. $" + x + " withdrawn...");
} else {
System.out.println("Account does not have. $" + x + " to withdrawn...");
b.deposit(x);
}
}
最佳答案
我想说,这可以通过 around
建议更好地处理,它可以阻止继续正常调用,并在不允许事务的情况下替换一些其他操作。
around
建议的代码应该基本上与您为 before
编写的代码类似,除了在 if block 中您必须调用 proceed
继续正常执行,在 else block 中,您不再需要调用 deposit
。
关于java - 使用 AspectJ 询问安全提款/存款,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6008833/