2011-05-15 45 views
0

我有關於使銀行賬戶類實現安全撤回/存儲功能的問題。到目前爲止,當您向銀行賬戶類提款或存款時,它將打印日誌。無論如何,我的問題是如何實施安全性,例如你不能從銀行帳戶中扣除更多的錢。如果我不被允許在bankAccount類中實現這種安全性,並且希望將其實施爲AspectJ。使用AspectJ問題安全提取/存款

我現在有以下幾點。可以看出撤銷完成,無論if語句是真是假。因此,我必須在其他聲明中存入金額,所以它不會變成負值。這可以以更好的方式完成嗎?

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

我會說,這將通過around建議,可以防止程序正常調用和替代其他一些行動,而不是如果交易不應該被允許得到更好的處理。

around建議的代碼應該是基本相似,你寫什麼before,除了在if塊,你不得不打電話proceed將持續到正常執行,並在else塊你會不再需要致電deposit

+0

所以這就是周圍()應該用於。由於沒有很好的文檔,因此很難理解何時使用哪些建議。 – starcorn 2011-05-15 21:20:42