【问题标题】:Can't find referenced pointcut找不到引用的切入点
【发布时间】:2013-10-28 11:20:04
【问题描述】:

我正在开发我的第一个方面,但遇到了以下问题。

MyAspect 类:

@Component
@Aspect
public class MyAspect{


@Pointcut("execution(* com.mypackage.MyClass.method(..))")
public void sendComunication(){}

@AfterReturning("sendComunication()")
public void sendComunicationMail() {

    //TODO somethings
}

}

然后我在 applicationContext 中添加了“aop:aspectj-autoproxy”和 aop 命名空间。现在,当我尝试构建我的应用程序时,出现此错误:

    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0': Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut sendComunication
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323)
    ... 36 more
Caused by: java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut sendComunication
    at org.aspectj.weaver.tools.PointcutParser.parsePointcutExpression(PointcutParser.java:315)
    at org.springframework.aop.aspectj.AspectJExpressionPointcut.buildPointcutExpression(AspectJExpressionPointcut.java:207)
    at org.springframework.aop.aspectj.AspectJExpressionPointcut.buildPointcutExpression(AspectJExpressionPointcut.java:193)
    at org.springframework.aop.aspectj.AspectJExpressionPointcut.checkReadyToMatch(AspectJExpressionPointcut.java:182)
    at org.springframework.aop.aspectj.AspectJExpressionPointcut.getClassFilter(AspectJExpressionPointcut.java:163)
    at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:210)
    at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:264)
    at org.springframework.aop.support.AopUtils.findAdvisorsThatCanApply(AopUtils.java:296)
    at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findAdvisorsThatCanApply(AbstractAdvisorAutoProxyCreator.java:117)
    at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findEligibleAdvisors(AbstractAdvisorAutoProxyCreator.java:87)
    at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean(AbstractAdvisorAutoProxyCreator.java:68)
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:359)
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:322)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:407)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1461)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
    ... 42 more

我哪里做错了?

【问题讨论】:

  • 你添加了组件扫描吗?不过,我不确定这是否重要。
  • 是的,我添加了组件扫描
  • 你能发布跟踪吗?

标签: spring aspectj spring-aop


【解决方案1】:

This post 提示您需要升级到更新版本的 aspectj。 Get it here.

【讨论】:

    【解决方案2】:

    无论您提到什么,它都无法找到方面(即“execution(* com.mypackage.MyClass.method(..))”)。方法签名可能有误。

    【讨论】:

      【解决方案3】:

      我最近遇到了同样的问题。答案是将我们的 aspectj 版本更改为新版本。就像 Sotirios Delimanolis 说的那样。

      【讨论】:

      • 对不起。这是我第一次发布答案。
      【解决方案4】:

      问题是

      com.mypackage.MyClass

      不是 Spring 管理的 bean,而是 vaadin 面板中的方法

      【讨论】:

      • 这不会改变你得到的错误。 @Aspect 不需要应用即可创建。当 Spring 尝试创建 @Aspect 但找不到与 sendCommunication() 匹配的 @Pointcut 时会发生故障。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多