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

8

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

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 (& quot; выполнение (* get * ()) & quot;), то нет ошибки, но если я использую @Before (& quot; allGetters () & quot;) затем выдает ошибку & quot; java.lang.IllegalArgumentException: ошибка в :: 0 не может найти указанный pointcut allGetters

если я использую @Before (& quot; выполнение (* get * ()) & amp; в пределах (org.suman.Model.Circle) & quot;) вместо имени метода, это работает.

Мой 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, по которой он принимает метод

Для тех, кто зашел в эту ветку и ни одно из предложенных решений на этой странице не сработало, попробуйте взглянуть сюда:stackoverflow.com/questions/21279716/… rj2700

Ваш Ответ

10   ответов
-1

Пожалуйста, улучшите ваш пост, объяснив, почему ваш пост решает проблему.
3

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

0

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

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

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

@Pointcut("execution(* *get*())")
Даёт ту же ошибку user1379705
23

У меня возникла эта проблема - использование @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>
я использую java8, пробовал с aspectj 1.7.0 и 1.8.10, но все еще сталкиваюсь с проблемой
Довольно круто ... это необычно, но да, переход на последний работал для меня ... спасибо @ Forge_7
Любопытным людям, почему он не работает с 1.5.4 и работает с 1.7.0:stackoverflow.com/a/15683358/253468
0

е версии должны быть использованы, чтобы избежать таких проблем:

<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>
1

ом.

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.

0

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

0

У меня также возникла аналогичная проблема с советом @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>

Теперь он работает нормально для меня.

0

1

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

Похожие вопросы