Использование 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
методы. Я бы подумал, что по причинам согласованности между механизмами прокси они этого не допустят.