2010-02-15 7 views
18

Tôi gặp sự cố với định nghĩa điểm cắt trong Spring (phiên bản 2.5.6). Tôi đang cố gắng để đánh chặn tất cả các cuộc gọi phương thức đến một lớp học, ngoại trừ một phương pháp nhất định (someMethod trong ví dụ dưới đây).Cú pháp cú pháp AOP của Spring cho AND, OR và NOT

<aop:config> 
    <aop:advisor 
     pointcut="execution(* x.y.z.ClassName.*(..)) AND NOT 
        execution(* x.y.x.ClassName.someMethod(..))" 
    /> 
</aop:config> 

Tuy nhiên, trình chặn cũng được gọi cho một sốPhương pháp.

Sau đó, tôi cố gắng này:

<aop:config> 
    <aop:advisor 
     pointcut="execution(* x.y.z.ClassName.(* AND NOT someMethod)(..)))" 
    /> 
</aop:config> 

Nhưng điều này không biên dịch vì nó không phải là cú pháp hợp lệ (tôi nhận được một BeanCreationException).

Ai đó có thể đưa ra bất kỳ mẹo nào không?

+0

Bạn đã cân nhắc viết logic khía cạnh với kiểu @AspectJ thay thế? Nó đơn giản hơn và mạnh mẽ hơn để viết logic khía cạnh với Java. Đặc biệt là nếu bạn đang sử dụng Eclipse với plugin AJDT. – Espen

Trả lời

18

tôi biết có lẽ nó hơi muộn ở giai đoạn này nhưng ive được có cùng một vấn đề và tôi giải quyết nó bằng cách thoát khỏi chars dấu và để &amp;&amp; ! của nó thay vì ' VÀ KHÔNG 'hoặc' & &! '. tôi đang làm điều này trong file xml

<aop:config> 
    <aop:pointcut id="blah" expression="execution(* com.disney.goofy..*.*(..)) &amp;&amp; [email protected](com.disney.goofy.NonDisneyCharacter)"/> 
    <aop:advisor advice-ref="transAdvice" pointcut-ref="blah"/> 
</aop:config> 

này áp dụng những lời khuyên cho tất cả các phương pháp thực hiện trong com.disney.goofy và không được chú thích với NonDisneyCharacter

4

này nên làm việc (spring AOP reference):

pointcut="execution(* x.y.z.ClassName.*(..)) 
      && !execution(* x.y.x.ClassName.someMethod(..))" 
+2

Nó không hoạt động tôi sợ.Lưu ý rằng tham chiếu Spring nói &&> AND và! > Không có trong tệp XML. Cảm ơn cho tip anyway :) – Odinodin

1

Tôi cũng đang sử dụng lò xo 2.5. 6 và gặp sự cố tương tự với HOẶC không hoạt động, nhưng hoạt động. Nó chỉ ra rằng hoặc (in chữ thường) hiện hoạt động, do đó, rõ ràng là một lỗi trong mã đó.

Điều thú vị là cú pháp AspectJ đúng là & &, ||!, nhưng cú pháp và/hoặc/không được thêm vào bởi mùa xuân để làm việc trong xml dễ dàng hơn. Từ hướng dẫn:

Khi kết hợp pointcut tiểu biểu, '& &' là vụng về trong một tài liệu XML, và do đó từ khóa 'và', 'hoặc' và 'không' có thể được sử dụng thay cho '& &', '||' và '!' tương ứng.

tôi sẽ đoán rằng kể từ khi & & là người duy nhất đó là thực vụng về trong xml (không có gì khó khăn về đặt là |! Hoặc trong xml) sau đó là người duy nhất đó là được kiểm tra chính xác