0

我想使用基于 XML 的 Spring 配置来包装对第 3 方类中受保护方法的调用。我已经连接了一些春季课程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>

如何调整它以使用受保护的方法?

4

1 回答 1

0

正如评论中链接的问题/答案所述,Springs AOP 代理只能应用于public方法。

使用 JDK 代理,这是不可能的,因为代理只有目标对象的接口类型,因此您只能通过其public方法与它交互(请记住,接口中声明的所有方法都是public)。

使用 GGLIB 代理,因为代理确实具有目标对象的类类型,所以您可以与其protected方法交互。我认为出于代理机制之间的一致性原因,他们不会允许这样做。

于 2014-03-31T18:18:07.093 回答