一.前言
在使用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>
大致看了一下,並沒有發現什麼異常,仔細檢查了一遍,發現是切點的名稱與切面的引用重複了:
修改切點名稱爲其他的,啓動正常!