2011-05-15 50 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