本文介紹了Java:Spring AOP&∧重構的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
所以我開始使用Spring AOP,我突然想到了一些事情。配置方面時,所有批注都使用字符串作為參數,而不是使用類對象。
我之所以提出這個問題,是因為這意味著IDE(我使用的是Eclipse,所以我在這里只引用它)將不能正確地重構方面。因此,如果我有一個MyClass類,它的方法是公共的void Foo(),則Spring AOP批注的示例如下:
@Before ("execution(public void package.MyClass.foo())")
因為批注中的參數是一個字符串,所以如果我將方法名重構為公共void foo2(),它將破壞此方面的綁定。
我一直在搜索各種論壇和教程,但無論在哪里我都只能看到字符串參數,這表明這是唯一的選擇。我想您可以通過在聲明綁定的方式上更通用一點來解決這個問題:
@Before ("exeuction(public void package.MyClass.set*(..))")
這個新方法適用于MyClass中的任何setter方法,具有任意數量的參數(或沒有參數)。當然,像這樣含糊其辭可能并不總是奏效。
無論如何,我在這里有點咆哮,很晚了,我有點累了,我的大腦因為尋找答案而筋疲力盡。但我的最后一個問題是:有沒有辦法設置Spring AOP注釋,以便重構可以影響它們?
謝謝。
AOP
推薦答案的全部要點是以模塊化的方式實現橫切行為,并將其應用于理想情況下不知道任何方面的應用程序代碼。因此,您在兩者之間沒有固定的連接。重要的是要記住,在維護和重構應用程序代碼的同時,您還應該用它重構方面,以確保切入點不會中斷。
話雖如此,如果您安裝AJDT(AspectJ開發工具),Eclipse和其他IDE仍然會提示您應用哪些方面。我主要使用完整的AspectJ,而不是稱為Spring AOP的基于代理的”AOP lite”變體,所以我不知道AJDT對Spring AOP是否有用。不過,它將通過LTW(加載時編織)將AspectJ應用于Spring。
這里是“方面可視化”視角的屏幕截圖:
它以圖形方式顯示哪些方面適用于代碼的哪些部分。如果您雙擊任何虛線,代碼編輯器將引導您到應用方面的確切位置。
還有交叉引用視圖,在方面代碼和純Java代碼中有很少的指示符:
右側是交叉引用視圖,列出了應用于當前所選方法的所有方面。在左側有一些小圖標,指示適用于每種方法的建議類型。
順便說一句,交叉引用視圖也是從方面工作的。將光標放在建議內時,外部參照視圖將列出代碼中應用該建議的所有位置:
還有更多:AspectJ編譯器可以這樣配置,以列出方面代碼建議的所有連接點。您可以手動檢查輸出更改,甚至可以在自動煙霧測試中檢查更改。例如,如果因為您更改了一些包、類或方法名稱而導致建議不再適用,則會出現Xlint警告“AdviceDidNotMatch”和/或有時還會出現“validAboluteTypeName”。此外,有問題的建議的交叉引用視圖將為空:
正如您剛才看到的,在重構應用程序或方面代碼時,AJDT中有很多指示器和幫助器。
還有一件事:如果您使用AspectJ而不是Spring AOP,您可以選擇使用更簡潔、更具表現力的原生AspectJ語法,而不是注釋樣式的語法。我肯定更喜歡前者而不是后者。然后,您的代碼編輯器中不僅有字符串,還有更好的語法突出顯示、代碼完成和重構。
最后,但并非最不重要的一點:您還應該為方面代碼編寫單元測試,也許還有集成測試,以便注意方面是否中斷。手動檢查很好,但自動回歸測試在即時反饋方面是無與倫比的。;-)
這篇關于Java:Spring AOP&∧重構的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,