本文介紹了如何定義PointCut來挑選由指定方法調(diào)用的所有方法?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
有沒有辦法在AspectJ中定義一個切入點來挑選由指定方法直接執(zhí)行的每個方法?
例如,如果classA
中有parentMethod()
,則如下所示:
public void parentMethod() {
classB.methodX();
classC.methodY();
}
我想定義一個切入點,只要執(zhí)行它調(diào)用的方法methodX()
和methodY()
,就只使用有關(guān)parentMethod
的信息來挑選。有沒有辦法使用AspectJ切入點來實現(xiàn)這一點?
推薦答案
我認(rèn)為我們不是在談?wù)摾^承,因此您不應(yīng)該將其稱為父方法。您只是指一個調(diào)用其他方法的方法,不是嗎?無論如何,關(guān)于你的問題:
與原生AspectJ的cflow()
和cflowbelow()
切入點相比,使用Spring AOP表達(dá)控制流切點的方法有限。在您的例子中,如果您想堅持使用基于代理的Spring AOP,ControlFlowPointcut
就足夠了,因為您不需要任何方法名稱模式,但似乎有一個固定的方法名稱作為您的目標(biāo)。有關(guān)更多信息,請參閱:
第2節(jié),共this answer更新2節(jié),了解有關(guān)ControlFlowPointcut
的資源的基本指針。
This answer,如果您希望將方法模式與自定義MultiMethodControlFlowPointcut
(目前仍不受Spring開箱即用支持)匹配。
Spring手冊章節(jié)"Using AspectJ with Spring Applications"介紹如何通過加載時編織(LTW)將Spring配置為使用本機(jī)AspectJ。
如果您決定使用原生的AspectJ LTW方式,AspectJ手冊中關(guān)于control-flow-based pointcuts的章節(jié)將簡要介紹cflow
和cflowbelow
。
這篇關(guān)于如何定義PointCut來挑選由指定方法調(diào)用的所有方法?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,