Я в растерянности ... Я прошел шаги от Intro до AspectJ , но когда я пытаюсь скомпилировать образцы с помощью ajc, я получаю "ajc: advice, определенный вlearning.AccountAspect не был применен [Xlint: adviceDidNotMatch] " предупреждение о моих советах до, после и после.Вот мой полный код:
Account.java
package learning;
public class Account {
int balance = 20;
public boolean withdraw(int amount) {
if (balance < amount) {
return false;
}
balance = balance - amount;
return true;
}
}
AccoutnAspect.aj
package learning;
public aspect AccountAspect {
final int MIN_BALANCE = 10;
pointcut callWithDraw(int amount, Account acc) :
call(boolean Account.withdraw(int)) && args(amount) && target(acc);
before(int amount, Account acc): callWithDraw(amount, acc) {
}
boolean around(int amount, Account acc) :
callWithDraw(amount, acc) {
if (acc.balance < amount) {
System.out.println("Insufficient funds");
return false;
}
System.out.println("Withdrawal approved");
return proceed(amount, acc);
}
after(int amount, Account balance) : callWithDraw(amount, balance) {
}
}
AccountTest.java
package learning;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class AccountTest {
private Account account;
@Before
public void before() {
account = new Account();
}
@Test
public void given20AndMin10_whenWithdraw5_thenSuccess() {
assertTrue(account.withdraw(5));
}
@Test
public void given20AndMin10_whenWithdraw100_thenFail() {
System.out.println(account.balance);
assertFalse(account.withdraw(100));
System.out.println(account.balance);
}
}
У меня естьобщее понимание AOP и приличный опыт в C #, вкус AOP, PostSharp, но я не могу обернуться вокруг реализации AspectJ.Может ли кто-то пролить свет на то, что я упускаю из виду?