我目前使用的AspectJ 1.6.9表達式語法和我不知道爲什麼下面的切入點表達式:Spring AOP的切點通配符
(execution (* it.dtt..endpoint.*..*.invoke*(..)))
不匹配方法的執行聲明:
protected Object invokeInternal(Object object) throws Exception
類的
:
it.dtt.prova.endpoint.Richiesta
什麼想法?
我目前使用的AspectJ 1.6.9表達式語法和我不知道爲什麼下面的切入點表達式:Spring AOP的切點通配符
(execution (* it.dtt..endpoint.*..*.invoke*(..)))
不匹配方法的執行聲明:
protected Object invokeInternal(Object object) throws Exception
類的
:
it.dtt.prova.endpoint.Richiesta
什麼想法?
「由於Spring AOP的代理性質,protected
方法通過定義不被攔截」。
,你需要的是方法的訪問修飾符更改爲public
或考慮使用spring-driven native AspectJ weaving
由於Spring的AOP框架的基於代理的性質,保護 方法是通過定義不被攔截,JDK代理 (這不適用)或CGLIB代理(在技術上這是 但不推薦用於AOP目的)都不被攔截。作爲 的後果,任何給定的切入點將僅與公共方法 匹配!
如果您的攔截需求包括受保護/私有方法或構造函數,則考慮使用Spring驅動的本機AspectJ編織 而不是Spring的基於代理的AOP框架。這構成了具有不同特徵的AOP使用的不同模式,因此請確保 在做出決定之前先熟悉編織。
是的。如果您需要攔截受保護的或私有的方法或使用更強大的AOP工具(如攔截成員訪問等),則可以始終在Spring中使用完整的AspectJ。 – kriegaex
該方法名爲invokeInternal的事實應該是觸發器。它可能是內部調用的,內部方法調用不適用於AOP。 –