разделение весеннего аспектного класса между двумя веб-приложениями - PullRequest
1 голос
/ 10 июня 2011

У меня есть приложение, состоящее из двух веб-приложений и файлов JAR уровня EAR. Одно веб-приложение (допустим, SPApp) создается с использованием Spring, а другое - с помощью Struts (STApp). Я хочу поделиться классом Aspect SystemArchitecture SPApp, как определено здесь spring aop

6.2.3.3. Совместное использование общих определений точек

в STApp.

Я добавил класс SystemArchitecture в файл jar уровня EAR и вызывается из SPApp, но не выполняется при доступе к STApp.

Итак, я переместил класс аспектов SystemArchitecture в STApp, и он неожиданно сработал. Я не уверен, что происходит, когда я помещаю SystemArchitecture в lib уровня EAR.

Пожалуйста, помогите.

Спасибо, Hanumant

1 Ответ

0 голосов
/ 10 июня 2011

Spring AOP не будет работать вне весны.Внедрение Spring в AOP основано на динамическом проксировании, когда фабрика Spring Bean будет прокси-советовать классам вводить ваши pointcut.Что вам нужно, так это то, что называется «ткачество времени загрузки», когда java-агент используется для перехвата ClassLoader и декорирования рекомендованных классов при их загрузке.Это функциональность AspectJ, а не Spring AOP.Подробнее читайте здесь: http://www.eclipse.org/aspectj/doc/released/devguide/ltw.html

Spring и AspectJ могут также играть вместе, но это ограничено приложениями с пружинным приводом: http://static.springsource.org/spring/docs/3.0.0.RC2/spring-framework-reference/html/ch07s08.html

Тем не менее, если вы хотите «истинный» AOP, независимыйSpring, тогда вам нужно пойти в ткацкое время загрузки и AspectJ.

EDIT: возможно, неправильно прочитал ваш вопрос.Вы говорите, что это работает в вашем приложении Struts, только когда вы помещаете свой класс advise в само приложение.Из этого я прочитал, что ваше приложение Struts также работает на Spring.Трудно дать ответ, не зная вашего конфига.В частности, web.xml (оба), application.xml и ваши весенние конфиги.

...