如何解决AOP AspectJ切入点if引发ArrayIndexOutOfBoundsException:
我试图编写一个Aspect,试图实现Pointcut的if()条件,但收到ArrayIndexOutOfBoundsException。这是代码段。
@Pointcut("call(* com.aop.Service.activate(..)) && args(iActivate,..) && if()")
public static boolean saveActivate(Activate iActivate) {
return true; //if false @before she not be invoked
};
@Before("saveActivate(iActivate)")
public void saveActivateBefore(JoinPoint ijoinPoint,ActivateInstallmentRequest iActivateInstallmentRequest) {
System.out.println("Log from @before");
}
这段代码给了我以下异常:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'objectMapperConfigurer' defined in class path resource [springfox/documentation/spring/web/SpringfoxWebMvcConfiguration.class]: Initialization of bean failed; nested exception is java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1
有人可以帮我我在这里想念的东西吗? PS:我也提到了AspectJ。
解决方法
在确认您使用Spring AOP之后,答案确实是if()
和call()
均不受支持,请参阅有关pointcut designators的Spring手册部分。
如果要使用这些指示符,则需要激活AspectJ via LTW (load-time weaving)。
Spring AOP的一种解决方法是在建议方法的开头简单地使用常规的if
,如果没有使用call()
的特殊原因,请改用execution()
,这正是大多数人想要的。在这里,我不会详细说明调用和执行连接点之间的区别,但是您可以例如有关更多信息,请咨询my answer there。
更新:您的代码段中还有其他一些地方看起来有些奇怪,但是我所解释的是目前最大的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。