2013-06-09 5 views
0

Я использую Spring aop и определил некоторые аспекты. На моем котле включен Spring LTW. В моем контексте приложения:Spring AOP с использованием AspectJ LTW не работает

<context:load-time-weaver/> 
<aop:aspectj-autoproxy proxy-target-class="false"/> 

аспекты работают тоже хорошо! но целевой класс проксирован! что вызывает ClassCastException: невозможно преобразовать $ Proxy ... Обратите внимание, что я не проверяю целевые классы!

ответ

0

Если вы используете AspectJ LTW вам нужно только тэг

<context:load-time-weaver/> 

в контексте вашего файла Spring. Таким образом, вы можете удалить,

<aop:aspectj-autoproxy proxy-target-class="false"/> 

Если целевой класс проксируется потому, что LTW с AspectJ не настроен в хорошем смысле, по этой причине не AspectJ, который обрабатывает ваши советы, и весна, который делает что , По этой причине вы видите целевой класс на основе прокси.

Проверить это ссылка,

http://static.springsource.org/spring/docs/3.2.2.RELEASE/spring-framework-reference/html/aop.html#aop-aj-ltw

http://static.springsource.org/spring/docs/3.2.2.RELEASE/spring-framework-reference/html/aop.html#aop-aj-ltw-environments

+0

Итак, вы говорите, что если я использую Spring AOP с LTW, нет никакого способа для целевых классов не будут проксированными? (Я не хочу использовать компилятор AspectJ!) – AmirMV

+0

Если вы хотите LTW, вам придется использовать компилятор AspectJ. Больше, если вы хотите LTM, вам придется использовать файл META-INF/aop.xml. Сама пружина не может использовать LTW и только способна создавать аспекты, основанные на прокси. Если вы хотите LTW, вам нужно ввести AspectJ. Вы можете интегрировать ApectJ с Spring (даже инъекции зависимостей внутри ваших советов AspectJ), но у вас не может быть LTW без AspectJ и только с использованием Spring. –

Смежные вопросы