2011-05-15 3 views
0

bankAccount 클래스를 만드는 것과 관련하여 안전한 인출/입금 기능을 구현하는 것과 관련된 질문이 있습니다. 지금까지 bankAccount 클래스에 인출하거나 입금하면 로그가 인쇄됩니다. 어쨌든 내 질문은 안전을 구현하는 방법입니다. 현재 은행 계좌에있는 것보다 더 많은 돈을 인출 할 수 없습니다. bankAccount 클래스에서 안전성을 구현할 수 없으며이를 AspectJ에 구현하려고한다.AspectJ를 이용한 안전한 인출/예금

다음과 같은 내용이 있습니다. 보시다시피 if-statement가 true 또는 false인지 여부에 관계없이 withdraw가 수행됩니다. 그러므로 나는 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); 
    } 

} 

답변

1

는 더 정상적인 호출에 진행을 방지하고 트랜잭션이 허용되지 않아야 경우 대신 다른 작업을 대체 할 수있는 around 조언에 의해 처리 될 것이다.

around 조언 코드는 당신이 정상적인 실행에 계속 proceed를 호출 할 필요가하려는 경우 블록을 제외하고, 당신이 before을 위해 쓴 기본적으로 비슷해야하고, 다른 블록에 더 이상 좋겠 deposit으로 전화해야합니다.

+0

그래서 around()를 사용해야합니다. 좋은 문서가 없기 때문에 언제 조언을 사용해야하는지 이해하기가 어렵습니다. – starcorn