完整报错如下:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'beforeAdvice' defined in class path resource [applicationContext.xml]: BeanPostProcessor before instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.aop.aspectj.AspectJPointcutAdvisor#0': Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.aop.aspectj.AspectJPointcutAdvisor]: Constructor threw exception; nested exception is java.lang.IllegalArgumentException: Pointcut is not well-formed: expecting 'name pattern' at character position 10
execution()
出现了一种<aop:config>标签与bean无法共存的现象,一开始以为是aspectj 包的版本问题,可修改来修改去,还是报错。
解决方案:后来发现,还是因为excution()内的表达式写错了,修改后运行成功。
<aop:config> <aop:aspect id="beforeAspect" ref="beforeAdvice"> <aop:before method="methodBefore" pointcut="execution(* com.ph.service..*.*(..))"/> </aop:aspect> </aop:config>
如果排除了版本不匹配、注解没写等问题后,还是报错,就要考虑是不是execution表达式写错了。