一.前言
在使用xml配置aop,测试AOP时,报错如下:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#3bbc39f8': Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: Unable to locate method [loginBefore] on bean [loginCheck]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:603)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:374)
... 36 more
Caused by: java.lang.IllegalArgumentException: Unable to locate method [loginBefore] on bean [loginCheck]
at org.springframework.aop.config.MethodLocatingFactoryBean.setBeanFactory(MethodLocatingFactoryBean.java:80)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1818)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1783)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595)
... 38 more
二. 问题定位
提取有用的报错信息:
Error creating bean with name '(inner bean)#400cff1a'
Unable to locate method [loginBefore] on bean [loginCheck]
报错显示是loginCheck中方法出错,仔细检查了类中的方法,并没有错误,看网上说是aspectjweaver的jar包未引入导致,检查了一下,引入正常,说明不是jar包的问题,想到可能是配置文件有问题,我的配置如下;
<aop:config >
<aop:aspect id="myLoginCheck" ref="loginCheck">
<aop:pointcut id="loginCheck" expression="execution(* com.clguo.service.*.*(..))"/>
<aop:before pointcut-ref="loginCheck" method="loginBefore"/>
</aop:aspect>
</aop:config>
大致看了一下,并没有发现什么异常,仔细检查了一遍,发现是切点的名称与切面的引用重复了:
修改切点名称为其他的,启动正常!