Spring AOP выражение - PullRequest
       2

Spring AOP выражение

0 голосов
/ 25 февраля 2012

Я получаю эту ошибку при запуске веб-приложения

Причина: org.springframework.beans.factory.BeanCreationException: Ошибка при создании компонента с именем 'org.springframework.aop.aspectj.AspectJPointcutAdvisor # 0': Завершение боба не удалось;вложенное исключение - org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр класса бина [org.springframework.aop.aspectj.AspectJPointcutAdvisor]: конструктор вызвал исключение;Вложенное исключение - java.lang.IllegalArgumentException: ошибка в формальной несвязанной :: 0 точке pointcut

Вот часть XML-файла, показывающая мой pointcut внизу

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

..... вещипропущен

  <aop:config>
    <aop:aspect id="bamAspectAroundID" ref="bamAspectAround">
        <aop:pointcut id="bamAroundMethodPointcut" expression="execution(* testBA*(..))" />
        <aop:around method="aspectAroundMethod" pointcut-ref="bamAroundMethodPointcut"/>
    </aop:aspect>
  </aop:config>

в одном из моих классов, у меня есть фиктивный метод

    public void testBAM() {
       System.out.println("in testBAM() ");
    }

Выражение выглядит мне хорошо.какие-нибудь указатели?мы используем aspectj 1.6.2.спасибо.

1 Ответ

0 голосов
/ 25 февраля 2012

Я могу подтвердить, что ваше выражение AspectJ в порядке.Я сделал тестовую версию, используя то, что вы дали нам выше, и это сработало.

Я не делал этого в веб-контейнере - я делал это в Eclipse как отдельное приложение Spring с использованием инструментов AspectJ 1.6.6 и библиотек AspectJ weaver 1.6.8 и Spring 3.1, так что немного впереди ваших настроекс точки зрения версий.

Вот что у меня сработало:

Файлы JAR, связанные с аспектами, в моем classpath:

  • org.springframework.aop-3.1.0
  • org.springframework.aspects-3.1.0
  • com.springsource.org.aspectj.tools-1.6.6
  • com.springsource.org.aspectj.weaver-1.6.8
  • com.springsource.org.aopalliance-1.0.0

AOP-часть моей конфигурации xml выглядит точно так же, как ваша - без изменений.

Я добавил следующие определения bean-компонентов в тот же конфигурационный XML-файл spring:

<bean id="aspectTarget"    class="foo.bam.Target" />
<bean id="bamAspectAround" class="foo.bam.BamAspectAround" />

В классе Target есть метод testBAM().

Код для BamAspectAround выглядит следующим образом:

public class BamAspectAround {
  public void aspectAroundMethod(ProceedingJoinPoint joinPoint) throws Throwable {
    System.out.println(">>> BamAspectAround Before");
    joinPoint.proceed();
    System.out.println("<<< BamAspectAround After");
  }
}

Основной метод имеет следующее:

Target t = (Target)ctx.getBean("aspectTarget");
t.testBAM();

И выводит то, что я ожидал:

>>> BamAspectAround Before
in testBAM() 
<<< BamAspectAround After

Примечание : Я также скачал AspectJ 1.6.2 и поместил его jar-файл weaver и jar инструментов в мой classpath (удаляя 1.6.8), и вышеописанное также сработало, поэтому, возможно, попробуйте этот простой пример снастройки и посмотрите, чего вам не хватает в развернутой в сети версии.

...