使用AspectJ解决安全提款/存款问题

时间:2011-05-15 14:01:16

标签: java aspectj

我有一个关于使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);
    }

}

1 个答案:

答案 0 :(得分:1)

我认为这可以通过around建议更好地处理,这可以防止继续进行正常调用,并且如果不允许该事务,则替换其他一些操作。

around建议的代码应基本上与您为before所写的内容相似,但在if块中,您必须调用proceed才能继续正常执行,在else块中,您不再需要调用deposit