[英]How can I make an incorrect pointcut expression throw an exception?
我有以下切入點表達式:
@Pointcut("execution(* apply(..))")
現在,如果建議的方法重命名為applyTo
則切入點不再正確,建議將永遠不會觸發。 建議的失敗不會被注意到,因為不正確的切入點不會在應用程序啟動時或運行時引發任何異常。
我已經瀏覽了 Spring AOP 文檔,但找不到一種方法來使切入點因異常而失敗。 有辦法嗎?
安東尼奧是 100% 正確的,這里沒有錯誤。 切入點只是說:“如果您碰巧找到與此描述匹配的連接點,請在那里應用我的方面建議”。
Xlint:adviceDidNotMatch
。 但是想想看,它永遠不過是一個信息或警告,因為如果你編譯了一個方面模塊,你以后想將它應用到多個應用程序或一個應用程序中的其他模塊,無論你是使用 CTW 還是 LTW ,匹配的連接點只有在編織這些模塊時才能找到。所以這不是錯誤,否則你永遠無法使用方面庫或 LTW。 方面的整體思想是它們獨立於應用程序代碼。
此外,如果您將 99% 的apply
方法重命名為applyTo
但出於某種原因(意圖或疏忽)保留單個apply
方法,則切入點仍將匹配,因此您的假設錯誤也不會產生。 您的錯誤不是句法上的而是語義上的,方面編織者怎么知道這一點? 正如安東尼奧所說,小心重構。 在這種特殊情況下,您可以將切入點更改為apply*
,然后它將同時匹配apply
和applyTo
但也applyMagic
您可能不想要的applyMagic
。
Stultuske 匹配注解而不是方法名稱的想法是我所說的“窮人的 AOP 方法”,因為它仍然在整個代碼庫中散布與 AOP 相關的信息,因此並沒有兌現 AOP 的承諾,不僅要擺脫代碼糾纏但也是散射。 分散現在僅適用於注釋而不是內聯方法代碼。 如果您根本沒有在應用程序代碼中看到 AOP,我個人最喜歡它,除非您希望以聲明方式應用某些功能,並且出於某種原因在源代碼中使用諸如@Transactional
注釋記錄該功能。 但這是一個品味問題,我可能仍然會嘗試將聲明放入方面切入點而不是應用程序中。 只有當整體匹配模式太復雜而無法在切入點中處理時,我才可能使用注釋。 鏈接注釋和方面的廣泛實踐,甚至使某種“AOP 設計模式”被誤導,因此被過度使用,IMO。 這種模式有很好的用途,但比我看到的要少得多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.