我想使用基于XML的Spring配置来包装对第三方类中的受保护方法的调用。我已经联系了org.springframework.aop.support
的一些春季课程。它适用于公共方法,但对于受保护的方法则失败:
<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 :(得分:0)
正如评论中的linked question/answer所述,Springs AOP代理只能应用于public
方法。
使用JDK代理,这是不可能的,因为代理只有您的目标对象的接口类型,因此您只能通过其public
方法与它进行交互(请记住,所有方法都在界面为public
)。
使用GGLIB代理,因为代理确实具有目标对象的类类型,所以您可以与其protected
方法进行交互。我认为,由于代理机制之间的一致性原因,他们不允许这样做。