2016-04-20 74 views
0

我目前使用的AspectJ 1.6.9表達式語法和我不知道爲什麼下面的切入點表達式:Spring AOP的切點通配符

(execution (* it.dtt..endpoint.*..*.invoke*(..))) 

不匹配方法的執行聲明:

protected Object invokeInternal(Object object) throws Exception 
類的

it.dtt.prova.endpoint.Richiesta 

什麼想法?

+0

該方法名爲invokeInternal的事實應該是觸發器。它可能是內部調用的,內部方法調用不適用於AOP。 –

回答

1

「由於Spring AOP的代理性質,protected方法通過定義不被攔截」。

,你需要的是方法的訪問修飾符更改爲public或考慮使用spring-driven native AspectJ weaving

Spring docs

由於Spring的AOP框架的基於代理的性質,保護 方法是通過定義不被攔截,JDK代理 (這不適用)或CGLIB代理(在技術上這是 但不推薦用於AOP目的)都不被攔截。作爲 的後果,任何給定的切入點將僅與公共方法 匹配!

如果您的攔截需求包括受保護/私有方法或構造函數,則考慮使用Spring驅動的本機AspectJ編織 而不是Spring的基於代理的AOP框架。這構成了具有不同特徵的AOP使用的不同模式,因此請確保 在做出決定之前先熟悉編織。

+0

是的。如果您需要攔截受保護的或私有的方法或使用更強大的AOP工具(如攔截成員訪問等),則可以始終在Spring中使用完整的AspectJ。 – kriegaex