Как смешать прокси CGLIB и JDK в конфигурационных файлах Spring?

Эта тема связана с проблемой, с которой я сталкиваюсьздесь о необходимости доступа к защищенным методам рекомендованного класса, Я использую Spring 3.0.6 и создал аспект профилирования Spring, который я применяю для значительного числа bean-компонентов, использующих прокси-серверы JDK.

Однако из-за необходимости доступа к защищенным методам в одном конкретном компоненте я бы посоветовал использовать CGLIB. Все остальные бины я хотел бы продолжать использовать JDK Proxies.

Я использую смесь аннотаций и конфигурации XML, но этот конкретный аспект определен в конфигурации XML.

Я знаю что есть<aop:scoped-proxy> тег, но из того, что я могу сказать, это относится ко всем аспектам.

Есть ли способ определить для одного аспекта использование CGLIB вместо этого?

<code><aop:config>
    <aop:aspect id="Profiler" ref="lendingSimulationServiceProfilerInterceptor">
        <!-- info -->
        <aop:around method="infoProfiler"
                    pointcut="execution(* com.cws.cs.lendingsimulationservice.service.LendingSimulationServiceImpl.calculate*(..))"  />

        <!-- debug -->
        <aop:around method="infoProfiler"
                    pointcut="execution(* com.cws.cs.lendingsimulationservice.process.LendingSimulationProcessImpl.calculate(..))"  />

        <aop:around method="infoProfiler"
                    pointcut="execution(* com.blaze.BlazeEngine.invokeService(..))"  />

        <!-- trace -->
        <aop:around method="traceProfiler" 
                    pointcut="execution(* com.calculator.dao.impl.LendingSimulationDaoImpl.*(..))"  />

        <!-- NEED TO DEFINE THIS PARTICULAR ASPECT AS CGLIB -->
        <aop:around method="traceProfiler" 
                    pointcut="execution(* com.cws.cs.lendingsimulationservice.util.pool.JAXBPoolImpl.*(..))"    />
    </aop:aspect>
</aop:config>
</code>

Я пытался разделить конфигурацию на две части и указать для одной конфигурацииtarget-class="true" и другиеtarget-class="false", но, кажется, применить CGLIB ко всем на этом этапе.

Есть ли способ сделать это?

Спасибо,

Эрик

Ответы на вопрос(1)

Решение Вопроса

все или ни один bean-компонент используют CGLIB, и если вы используете проксирование целевого класса в одном месте, оно принудительно применяется во всех других местах. квотирование8.6 Механизмы прокси официальной документации:

Note

Multiple <aop:config/> sections are collapsed into a single unified auto-proxy creator at runtime, which applies the strongest proxy settings that any of the <aop:config/> sections (typically from different XML bean definition files) specified. This also applies to the <tx:annotation-driven/> and <aop:aspectj-autoproxy/> elements.

To be clear: using 'proxy-target-class="true"' on <tx:annotation-driven/>, <aop:aspectj-autoproxy/> or <aop:config/> elements will force the use of CGLIB proxies for all three of them.

 Eric B.11 апр. 2012 г., 21:02
Спасибо за ответ. Я боялся этого. Но потом я нашелthis post который, казалось, указывал, что он заставил это работать, но даже если я аннотирую свой целевой класс (JAXBPoolImpl) с@Scope( proxyMode = ScopedProxyMode.TARGET_CLASS ) это не похоже на работу для меня.

Ваш ответ на вопрос