【发布时间】:2021-09-02 10:44:33
【问题描述】:
我正在尝试获得一些建议来执行。 当我使用不带参数的注释时,它会执行,但当注释包含参数时,它不会执行。
@Aspect
class a{
@Pointcut("execution(@com.annotations.AnnotationName* *(..))")
void someMethod() {}
@Around("someMethod()")
public Object aroundSomeMethod(ProceedingJoinPoint pjp) throws Throwable
{
// some code
}
}
注释:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationName
{
public String someString();
public boolean someBoolean();
}
注解的使用:
@AnnotationName(
someString= "string",
someBoolean = false
)
private void mycode()
{//code }
【问题讨论】:
-
您确定您的切入点定义正确吗?我自己尝试过,我得到:
java.lang.IllegalArgumentException: Pointcut is not well-formed: expecting 'name pattern' at character position 54 execution(@com.annotations.AnnotationName* *(..)) -
这不是我真正使用的表达式,无法写出真正的路径。但它确实在没有参数的情况下工作
-
如果您不发布真实代码,我们如何为您提供帮助?请发布一个有意义的小例子来复制行为。
-
注解参数的数量不是问题,而是你试图建议一个私有方法,这对于像 Spring AOP 这样的基于代理的工具是不可能的。您需要本地 AspectJ 来为私有方法提供建议。
-
请提供足够的代码,以便其他人更好地理解或重现问题。
标签: spring aop spring-aop spring-annotations