2011-02-28 48 views
2

我有下面的切入點定義Spring AOP的忽略黑森州的一些方法服務

@Pointcut("execution(public de.company.project..* *(..))") 

,幷包含在實際配置中有下列

<aop:aspectj-autoproxy /> 

<bean id="myaspect" 
     class="de.company.project.impl.MyAspect" /> 

<bean id="someService" class="de.company.project.impl.SomeService" /> 

<bean name="/SomeService" 
    class="org.springframework.remoting.caucho.HessianServiceExporter"> 
    <property name="service" ref="someService" /> 
    <property name="serviceInterface" 
     value="de.company.project.interf.SomeService" /> 
</bean> 

(有多個服務彈簧配置的看點)

我看到在某些方法中調用的方面,但不是全部。我懷疑(但不完全舒服)只有在接口中直接聲明的方法被包裝在方面中,超接口中聲明的方法被忽略(儘管該接口應該匹配相同的切入點)。

這是預期的行爲?我該如何改變它?還有什麼可能發生?

回答

2

答案是:我搞砸了切點模式。看起來像這樣

@Pointcut("execution(public de.company.project..* *(..))") 

指定返回類型的封裝,而這

@Pointcut("execution(public de.company.project..*(..))") 

指定具有所述方法的類型的包。

請參閱I need a Spring AOP pointcut explanation

1

只是一個猜測。我沒有證據證明這可能是您設置中的實際原因。

我知道Spring AOP不會攔截本地方法調用。即如果同一對象調用自己的方法,則應用的代理不會攔截調用,即使它與切入點表達式匹配。

編輯:另一種猜測。你確定所有有關類的實例都是Spring託管代碼嗎?有沒有可能你的代碼的某些部分(或某個庫)不使用Spring而創建這些類的實例? 如果發生這種情況,Spring AOP不能攔截這樣的bean,因爲Spring AOP只是圍繞Spring管理的bean進行編譯。

+0

感謝您的提示。但我所看到的所有方法調用都是通過Hessian ... – 2011-02-28 13:17:43

+0

添加了另一個猜測。 – 2011-03-01 22:48:05