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