UnsupportedPointcutPrimitiveException в простом примере AOP - PullRequest
2 голосов
/ 29 июня 2011

Я пытаюсь запустить простой пример на этом сайте.У меня есть Spring aop и aspectj, aspectjweaver jars:

@Aspect
public class StringAspect {

    @Pointcut("call(* String.toLowerCase())")
    public void toLowerCasePointcut() {}

    @Around("toLowerCasePointcut()")
    public String toLowerCaseAroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable {
        String text = ((String) joinPoint.getTarget()).toUpperCase();
        return text;
    }
}

Когда я запускаю этот пример в Test.java как «AaBbCc» .toLowerCase (), я получаю это исключение;

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean ... Initialization of bean failed; nested exception is org.aspectj.weaver.tools.UnsupportedPointcutPrimitiveException: Pointcut expression call(* String.toLowerCase()) contains unsupported pointcut primitive 'call'

Spring AOP не содержит "call", но почему ткачество аспекта не работает, у вас есть идея?Спасибо.

edit:

В моем весеннем конфигурационном файле у меня есть только определение bean-компонента аннотированного класса @aspect и <aop:aspectj-autoproxy />.мои банки: spring-aop-3.0.5, aopalliance, aspectjrt1.6.8, aspectjweaver1.5.0

1 Ответ

2 голосов
/ 29 июня 2011

Вы пытались использовать плагин AspectJ Eclipse для плетения? (Он также включен в SpringSource Tool Suite )

Если у вас есть какая-то аспектная конфигурация в вашей конфигурации Spring. Попробуйте удалить его и просто включите AspectJ nature в проекте. Также удалите все файлы JAR AspectJ и используйте только те, которые подключаются плагином автоматически.

При такой настройке у меня это работает как минимум.

Обновлено: включение рекомендаций по аспектам в код

Вы получаете исключение из контейнера Spring из-за вашей точки вызова. Но вы хотите, чтобы AspectJ соткал ткань. Затем вам нужно использовать ткачество во время компиляции или во время загрузки. Ткачество во время компиляции - самая простая альтернатива, предлагаемая плагином.

Компилятор AspectJ можно рассматривать как усовершенствованный компилятор Java, который также поддерживает AspectJ. Таким образом, вы можете запустить свой скомпилированный код где угодно.

Кроме того, вам не нужен плагин для компиляции. Например, вы можете скомпилировать задачу Ant, как я показал здесь .

Но самая простая альтернатива - использовать плагин. Это также дает вам дополнительную помощь, которую я кратко описал здесь .

Надеюсь, это поможет!

...