Eclipse: Как преобразовать веб-проект в проект AspectJ, создать и запустить его с помощью плагина AJDT? - PullRequest
4 голосов
/ 09 июня 2009

Что я хочу сделать:

  • Я хочу использовать аннотацию @Configured с Spring. Требуется, чтобы AspectJ был включен. Я думал, что использование плагина AJDT для плетения времени компиляции решит эту проблему. Перед установкой плагина зависимости, которые должны были быть внедрены в мой объект @Configured, оставались нулевыми.

Что я сделал:

  • Установлен AJDT: AspectJ Development Tools плагин для Eclipse 3.4.
  • Щелкните правой кнопкой мыши по моему веб-проекту и преобразовали его в проект AspectJ.
  • Включено переплетение времени компиляции.

Что не работает:

  • Когда я запускаю сервер Tomcat 6 сейчас, я получаю исключение *.

Другая информация:

  • Я ничего не настроил в частях свойств проекта AspectJ Build и AspectJ.
  • Плетение JDT в Предпочтениях говорит, что ткачество включено.
  • У меня все еще есть путь сборки Java и компилятор Java в свойствах проекта. И они выглядят так, как будто я их ранее настраивал (хотя две новые записи не настроены).
  • Значок моего @Configured объектного файла выглядит как любой другой файл (т. Е. Без указания какого-либо аспекта или чего-либо такого, что, я думаю, должно быть). Имя файла - MailNotification.java (а не .aj), но я думаю, оно все равно должно работать, так как я использую аннотацию Spring для AspectJ?
  • Я не нашел ни одного учебного пособия или аналогичного пособия, которое учит: как превратить проект веб-приложения Spring в проект AspectJ и сплетить аспекты в файлы с помощью плагина AJDT, все в Eclipse 3.4. Если есть что-то подобное, мне было бы очень интересно узнать об этом.

Что бы я хотел знать:

  • Куда пойти отсюда? Я просто хочу использовать аннотацию @Configured Spring. Я также использую @Transactional, который, я думаю, также нуждается в AspectJ.
  • Если это возможно, я бы хотел изучить AspectJ как можно меньше, пока мои потребности удовлетворяются. Тема кажется интересной, но огромной, все, что я хочу сделать, это использовать две вышеупомянутые аннотации Spring.

*** Исключение при запуске Tomcat 6:

Caused by: java.lang.IllegalStateException: ClassLoader [org.apache.catalina.loader.WebappClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:spring-agent.jar
at org.springframework.context.weaving.DefaultContextLoadTimeWeaver.setBeanClassLoader(DefaultContextLoadTimeWeaver.java:82)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1322)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
... 41 more

Ответы [ 3 ]

1 голос
/ 09 июня 2009

Вы добавили spring-aspect.jar в свой аспектный путь для проекта?

В свойствах проекта в «AspectJ Build» -> «Aspect Path» попробуйте добавить spring-aspect.jar и очистить сборку проекта.

Извините, вы, возможно, уже сделали это, но вы не упомянули об этом.

0 голосов
/ 26 июня 2009

Вы можете использовать @Transactional без AspectJ. Ваш файл конфигурации должен содержать что-то вроде следующего, чтобы он работал:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
  http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
  http://www.springframework.org/schema/aop
  http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
  http://www.springframework.org/schema/tx
  http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
  http://www.springframework.org/schema/util 
  http://www.springframework.org/schema/util/spring-util-2.5.xsd"
  >
<tx:annotation-driven/>

говорит Spring, что нужно искать аннотации @transactional при создании экземпляров сконфигурированных bean-компонентов. При нахождении такой аннотации Spring возвращает динамический прокси-компонент компонента в код приложения. Этот динамический прокси-сервер гарантирует, что всякий раз, когда аннотированные методы вызываются, Spring может перехватить его, чтобы обеспечить предполагаемое поведение транзакции. Но AOP на основе прокси требует, чтобы вы кодировали интерфейсы, а не конкретные классы.

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

Похоже, что время компиляции не работает. Попробуйте добавить следующие строки в ваше applicationcontext.xml

<context:load-time-weaver />
<context:spring-configured/>

Возможно, вы захотите добавить следующий xsd в xml-файл

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd

Подробнее см. Здесь:

http://static.springframework.org/spring/docs/2.5.x/reference/aop.html#aop-aj-ltw

...