2013-08-02 23 views
24

Hãy nói rằng bạn có ba lời khuyên: xung quanh, trướcsau.AspectJ "xung quanh" và "tiến hành" với "trước/sau"

1) Are trước/sau gọi khi tiến hành được gọi là trong những lời khuyên xung quanh, hoặc là họ gọi trước/sau những lời khuyên xung quanh như một toàn thể?

2) Nếu xung quanh lời khuyên của tôi không gọi tiến hành, sẽ các trước/sau lời khuyên được chạy không?

+0

tôi sẽ tưởng tượng này có thể dễ dàng kiểm chứng; có vấn đề cụ thể nào ngăn cản bạn làm như vậy không? –

+0

@DaveNewton Vâng, tôi không phải là nhà phát triển Java và không có sẵn tính năng môi trường. Tôi đang chuyển mô hình AOP trong một ngôn ngữ khác và xem xét các tài liệu về các công cụ hiện có. Tôi nghĩ tốt hơn nên hỏi các chuyên gia ở đó, nhưng nếu không ai có thể giúp tôi, đó là điều tôi sẽ làm cuối cùng. –

Trả lời

35

Với thử nghiệm này

@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); 
    } 
} 

tôi đã theo sản lượng

  1. ở xung quanh trước khi thực hiện (void aspects.TestAspect.hello())
  2. trước khi thực hiện (void aspects.TestAspect.hello())
  3. trong hello
  4. sau khi thực hiện (các khía cạnh trống.TestAspect.hello())
  5. ở xung quanh sau khi thực hiện (void aspects.TestAspect.hello())
  6. ở xung quanh trước khi thực hiện (void aspects.TestAspect.hello())
  7. ở xung quanh sau khi thực hiện (void aspects.TestAspect.hello())

để bạn có thể nhìn thấy trước/sau không được gọi

+0

Thx cho câu trả lời của bạn. Nó thực sự đã giúp! –

+0

cảm ơn rất nhiều !!!!! – IloveIniesta

Các vấn đề liên quan