2013-08-02 13 views
24

Diciamo che ci sono tre consigli: intorno, prima e dopo.AspectJ "intorno" e "proseguire" con "prima/dopo"

1) Sono prima/dopo chiamato quando procedere viene chiamato nel consiglio intorno, o si chiamano prima/dopo il consiglio intorno nel suo complesso?

2) Se la mia intorno consiglio non chiama procedere, sarà il prima/dopo consulenza essere eseguito in ogni caso?

+0

mi immagino questo è facilmente verificabile; c'è un problema specifico che ti impedisce di farlo? –

+0

@DaveNewton Beh, non sono uno sviluppatore Java e non ho disponibilità di ambiente. Sto facendo il porting del paradigma AOP in un'altra lingua e cerco la documentazione sugli strumenti esistenti. Penso che sarebbe meglio chiedere agli esperti là fuori, ma se nessuno mi può aiutare, è quello che farò alla fine. –

risposta

35

Con questo test

@Aspect 
public class TestAspect { 
    private static boolean runAround = true; 

    public static void main(String[] args) { 
     new TestAspect().hello(); 
     runAround = false; 
     new TestAspect().hello(); 
    } 

    public void hello() { 
     System.err.println("in hello"); 
    } 

    @After("execution(void aspects.TestAspect.hello())") 
    public void afterHello(JoinPoint joinPoint) { 
     System.err.println("after " + joinPoint); 
    } 

    @Around("execution(void aspects.TestAspect.hello())") 
    public void aroundHello(ProceedingJoinPoint joinPoint) throws Throwable { 
     System.err.println("in around before " + joinPoint); 
     if (runAround) { 
      joinPoint.proceed(); 
     } 
     System.err.println("in around after " + joinPoint); 
    } 

    @Before("execution(void aspects.TestAspect.hello())") 
    public void beforeHello(JoinPoint joinPoint) { 
     System.err.println("before " + joinPoint); 
    } 
} 

ho seguente output

  1. intorno prima dell'esecuzione (vuoto aspects.TestAspect.hello())
  2. prima dell'esecuzione (vuoto aspects.TestAspect.hello())
  3. in ciao
  4. dopo l'esecuzione (aspetti void.TestAspect.hello())
  5. intorno dopo l'esecuzione (vuoto aspects.TestAspect.hello())
  6. intorno prima dell'esecuzione (vuoto aspects.TestAspect.hello())
  7. intorno dopo l'esecuzione (vuoto aspects.TestAspect.hello())

in modo da poter vedere prima/dopo non sono chiamati

+0

Thx per la tua risposta. Mi ha davvero aiutato! –

+0

grazie mille !!!!! – IloveIniesta