2014-03-31 45 views
0

我想使用基於XML的Spring配置將調用包裝到第三方類中的受保護方法。我已經連線了org.springframework.aop.support的一些春季班。它適用於公共方法,但它不能用於保護的:使用MethodInterceptor將調用打包到受保護的方法

<bean id="sampleAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> 
<property name="proxyTargetClass" value="true" /> 
<property name="beanNames"> 
    <list> 
     <value>thrirdPartyBean</value> 
    </list> 
</property> 
<property name="interceptorNames"> 
    <list> 
     <value>sampleAdvisor</value> 
    </list> 
</property> 
</bean> 
<bean id="sampleMethodNamePointcut" class="org.springframework.aop.support.NameMatchMethodPointcut"> 
    <property name="mappedNames"> 
     <list> 
      <value>publicMethodThatWorks</value> 
      <value>protectedMethodThatDoesNotWork</value> 
     </list> 
    </property> 
</bean> 
<bean id="sampleAdvice" class="sample.MyMethodInterceptor" /> 
<bean id="sampleAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor"> 
    <property name="pointcut" ref="sampleMethodNamePointcut" /> 
    <property name="advice" ref="sampleAdvice" /> 
</bean> 

我如何可以調整這與保護方法的工作?

+0

請參閱http://stackoverflow.com/questions/15093894/aspectj-pointcut-for-annotated-private-methods。你需要使用AspectJ。 – jny

+0

底層的問題是什麼?我的意思是在技術上,當代理生成代理類的包時,訪問應該沒有問題。 –

回答

0

由於評論狀態中的linked question/answer,Springs AOP代理只能應用於public方法。

隨着JDK代理,這是不可能的,因爲代理只有你的目標對象的接口類型,所以你可以用它通過其public方法僅交互(請記住,在接口中聲明的所有方法都public)。

對於GGLIB代理,由於代理確實具有目標對象的類類型,因此可以使用它的protected方法進行交互。我認爲出於代理機制之間一致性的原因,他們不會允許它。