我有一个关于使bankAccount类实现安全撤销/存款功能的问题。到目前为止,当您提取或存入bankAccount类时,它将打印日志。无论如何,我的问题是如何实现安全,例如您不能提取比您目前银行帐户中的金额更多的钱。如果我不被允许在bankAccount类中实现该安全性,并希望将其实现为AspectJ。
我现在有以下内容。可以看出,无论if语句是true还是false,都完成撤销。因此我不得不在其他声明中存回金额,因此不会变为负数。这有可能以更好的方式完成吗?
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);
}
}
答案 0 :(得分:1)
我认为这可以通过around
建议更好地处理,这可以防止继续进行正常调用,并且如果不允许该事务,则替换其他一些操作。
around
建议的代码应基本上与您为before
所写的内容相似,但在if块中,您必须调用proceed
才能继续正常执行,在else块中,您不再需要调用deposit
。