我试图在这样的AOP切入点中捕获我的注释(如this question所示):
@After("@annotation(com.mypackage.annotation.Traza)")
protected void logAnnotatedMethods(JoinPoint pjp, Traza traza) throws Throwable {
LOGGER.info("It's here");
LOGGER.info("Traza:" + traza);
}
但是我一直收到
java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut
异常。如果删除Traza参数,则该参数将起作用,并且无论我在何处使用@Traza对其进行注释,切入点都将起作用。我知道我可以使用反射来获取批注,但是这也行不通吗?
最佳答案
任何有相同问题的人,以下是解决方法:
@After("@annotation(traza)")
protected void logAnnotatedMethods(JoinPoint pjp, Traza traza) throws Throwable {
LOGGER.info("It's here");
LOGGER.info("Traza:" + traza);
}
即,将参数名称设置为@After注释中的@annotation位。