Spring AOP java .lang.IllegalArgumentException: ошибка в формальной несвязанной :: 0 в pointcut - PullRequest
1 голос
/ 15 января 2020

Я хочу создать аспект, который бы перехватывал все методы, помеченные MyAnnotation и имеющие тип параметра MyAbstractObject (разные классы расширяют его, и те методы, которые имеют классы, которые его расширяют, также должны быть перехвачены)

@Before("@annotation(mypackage.MyAnnotation) && args(mypackage.MyAbstractObject ,..)")
public void doSomething(MyAbstractObject myObject) 

Примеры методов:

@MyAnnotation
public void toBeIntercepted(MyObjectExtendingMyAbstractObject x)

Работало только с аннотациями. Но я должен был извлечь параметры из совместной точки зрения, что было некрасиво. Теперь я меняю его.

Это создает следующее исключение:

Caused by: java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut
    at org.aspectj.weaver.tools.PointcutParser.parsePointcutExpression(PointcutParser.java:319) ~[aspectjweaver-1.9.4.jar:na]
    at org.springframework.aop.aspectj.AspectJExpressionPointcut.buildPointcutExpression(AspectJExpressionPointcut.java:227) ~[spring-aop-5.1.7.RELEASE.jar:5.1.7.RELEASE]
    at org.springframework.aop.aspectj.AspectJExpressionPointcut.obtainPointcutExpression(AspectJExpressionPointcut.java:198) ~[spring-aop-5.1.7.RELEASE.jar:5.1.7.RELEASE]
    at org.springframework.aop.aspectj.AspectJExpressionPointcut.getClassFilter(AspectJExpressionPointcut.java:177) ~[spring-aop-5.1.7.RELEASE.jar:5.1.7.RELEASE]
    at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:225) ~[spring-aop-5.1.7.RELEASE.jar:5.1.7.RELEASE]```

1 Ответ

2 голосов
/ 15 января 2020

Неправильный формат args().

Правильный формат для этого выражения pointcut следующий:

@Before("@annotation(mypackage.MyAnnotation) && args(myObject,..)")
public void doSomething(MyAbstractObject myObject) {}
...