Spring中采用annotation的方式实现AOP代理,运行测试代码时抛出以下异常:
1. springAOP 报错 error at ::0 can't find referenced pointcut解决办法
Exception in thread "main"
org.springframework.beans.factory.BeanCreationException:
Errorcreating bean with name 'userManager' defined in class pathresource [applicationContext.xml]: Initialization of bean failed;nested exception is java.lang.IllegalArgumentException : error at::0 can't find referenced pointcut allAddMethod
Caused by:
java.lang.IllegalArgumentException :
error at ::0 can't find referencedpointcut
allAddMethod
atorg.aspectj.weaver.tools.PointcutParser.parsePointcutexpression_r(PointcutParser.java:315)
at org.springframework.aop.aspectj.AspectJExpressionPointcu t.buildPointcutExpression
atorg.springframework.aop.aspectj.AspectJExpressionPointcu t.checkReadyToMatch
atorg.springframework.aop.aspectj.AspectJExpressionPointcu t.getClassFilter
atorg.springframework.aop.support.AopUtils.canApply(AopUtils.java:189)
atorg.springframework.aop.support.AopUtils.canApply(AopUtils.java:244)
atorg.springframework.aop.support.AopUtils.findAdvisorsThatCanApply (AopUtils.java:278)
atorg.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxy Creator
atorg.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxy Creator
atorg.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator
atorg.springframework.beans.factory.support.AbstractAutowireCapableB eanFactory
atorg.springframework.beans.factory.support.AbstractAutowireCapableB eanFactory
atorg.springframework.beans.factory.support.AbstractAutowireCapableB eanFactory
atorg.springframework.beans.factory.support.AbstractBeanFactory$1.getObject
atorg.springframework.beans.factory.support.DefaultSingletonBeanRegi stry.getSingleton
atorg.springframework.beans.factory.support.AbstractBeanFactory.getBean
atorg.springframework.beans.factory.support.AbstractBeanFactory.getBean
atorg.springframework.beans.factory.support.DefaultListableBeanFacto ry
atorg.springframework.context.support.AbstractApplicationConte xt.refresh
atorg.springframework.context.support.ClassPathXmlApplicationC ontext. (ClassPathXmlApplicationC ontext.java:122)
atorg.springframework.context.support.ClassPathXmlApplicationC ontext. (ClassPathXmlApplicationC ontext.java:66)
atcom.huang.spring.Client.main(Client.java:10)
2. Caused by: java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut 解决方法
AOP 源码 :@Before("execution(** com.bean.Person.go(String) )")
public void goWhere(String where){
System.out.println("去哪里"+where) ;
}
原因是应该用args指明参数,改成以下就可以了:
@Before("execution(** com.bean.Person.go(String) ) && args(where)")
public void goWhere(String where){
System.out.println("去哪里"+where) ;
}