AOP: java.lang.IllegalArgumentException: ошибка в:: 0 не может найти ссылку pointcut

Я новичок в АОП. У меня возникла такая проблема.

package org.suman.Aspect;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class LoginAspect {
    //@Before("execution(public String getName())")
    //@Before("execution(public String org.suman.Model.Triangle.getName())")
    //@Before("execution(* get*())")
    //@Before("execution(* get*(..))")
    //@Before("execution(* org.suman.Model.*.get*())")

    //@Before("execution(* get*())&& within(org.suman.Model.Circle)")
    @Before("execution(* get*())&& allCircle()")
    //@Before("allGetters() && allCircle()")
    public void LoginAdvice()
    {
        System.out.println("Advice run.. getMethod is called");
    }

    @Before("execution(* get*())")
    //@Before("allGetters()")
    public void SecondAdvice()
    {
        System.out.println("this is a second Advice");
    }
    @Pointcut("execution(* get*())")
    public void allGetters(){}

    //@Pointcut("execution (* * org.suman.Model.Circle.*(..))")
    @Pointcut("within(org.suman.Model.Circle)")
    public void allCircle(){}

} 

при использовании pointcut метод от allGetters() до LoginAdvice, если я использую @Before("execution(* get*())"), то ошибки нет, но если я использую @Before("allGetters()"), то выдает ошибку

java.lang.IllegalArgumentException: ошибка в :: 0 не может найти ссылочный pointcut allGetters

если я использую @Before("execution(* get*())&& within(org.suman.Model.Circle)") вместо имени метода, он работает.

Мой XML такой:

<?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:context="http://www.springframework.org/schema/context"
    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/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    <!-- <context:annotation-config /> -->
    <aop:aspectj-autoproxy />

    <bean name="triangle" class="org.suman.Model.Triangle">
        <property name="name" value="Triangle Name"></property>
    </bean>
    <bean name="circle" class="org.suman.Model.Circle">
        <property name="name" value="Circle name"></property>
    </bean>
    <bean name="shapeService" class="org.suman.Services.ShapeService"
        autowire="byName"></bean>
    <bean name="loginAspect" class="org.suman.Aspect.LoginAspect"></bean>

</beans>

Пожалуйста, решите проблему с pointcut, с помощью которого он принимает метод

Ответ 1

У меня была эта проблема - использование метода @Pointcut в методе "placeholder" давало мне ошибку "не найти ссылку на pointcut".

Решено просто обновить библиотеки AspectJ с помощью зависимостей maven от этого:

    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.5.4</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.5.4</version>
    </dependency>

к этому

    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.7.0</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.7.0</version>
    </dependency>

Ответ 2

Я столкнулся с той же проблемой. Как только я заменил aspectjweaver версией aspectjweaver-1.6.11.M2.jar. Все началось гладко.

Ответ 3

Проблема также может быть вызвана запуском ранней версии доступа JDK9.

Maven может предпочесть более новую версию Java над JVM в PATH.

В моем случае я запускаю Spring с Swagger2 через Maven на Ubuntu 15.04, и я установил java-8-oracle и java-9-oracle (и еще несколько версий). Мой java -version, полученный из PATH, говорит 1.8.0_72, но когда я запускаю Maven и меняю /usr/bin/mvn на echo JAVA_HOME, он показывает, что выбрал /usr/lib/jvm/java-9-oracle.

Экспорт JAVA_HOME в /usr/lib/jvm/java-8-oracle заставил Maven использовать нужную версию Java, и это привело к проблемам с AOP-переплетением точечных ссылок для проводки инъекций Spring.

Ответ 4

Используйте aspectjweaver и aspectjrt версии 1.8.10

Ответ 5

Я считаю, что вам нужно добавить еще один шаблон:

@Pointcut("execution(* get*())")

измените его на:

@Pointcut("execution(* *get*())")

Ответ 6

Вы должны изменить версию aspectJWeaver как 1.6.x

Ответ 7

У меня была эта проблема, потому что проект был скомпилирован в Java 1.6, но сервер tomcat запущен на Java 8.

Ответ 8

У меня также была аналогичная проблема с @Before советом, не принимающим имя метода @Pointcut в качестве аргумента. Я получил это исправление, изменив версию зависимостей на:

<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjrt</artifactId>
    <version>1.6.11</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.6.11</version>
</dependency>

Теперь он работает отлично.

Ответ 9

Это проблема зависимостей. Следующие jar файлы или зависимости одной и той же версии следует использовать, чтобы избежать таких проблем:

<dependency>
<groupId>aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.5.2</version>
</dependency>

<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.10</version>
</dependency>

<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.3.1</version>
</dependency>

<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>

<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>

Ответ 10

Добавьте это maven зависимости. Это решит вашу проблему.

Измените версию на 1.6.12

Ответ 11

Измените версию aspectjeaver до последней версии и разверните ее...