Использование MethodInterceptor для переноса вызовов в защищенный метод

Я хотел бы использовать конфигурацию Spring на основе XML, чтобы обернуть вызовы защищенного метода в стороннем классе. Я провел несколько весенних уроков 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>

Как я могу настроить это для работы с защищенными методами?

1 ответ

Как указано в связанном вопросе / ответе в комментариях, прокси-серверы Springs AOP могут применяться только к public методы.

Для прокси-серверов JDK это невозможно, поскольку прокси-сервер имеет только типы интерфейсов целевого объекта, поэтому вы можете взаимодействовать с ним только через его public методы (помните, что все методы, объявленные в интерфейсе public).

При использовании прокси-серверов GGLIB, поскольку прокси-сервер имеет тип класса целевого объекта, вы можете взаимодействовать с его protected методы. Я бы подумал, что по причинам согласованности между механизмами прокси они этого не допустят.

Другие вопросы по тегам