别名不用于@AspectJ aop样式

时间:2014-05-25 21:59:26

标签: java aspectj spring-aop

我有以下方式定义的方面:

@Component
@Aspect
public class SomeAspectDefinition {

  @Pointcut("execution(* *(..)) && bean(someBeanAlias)")
  private void pnct() {
  }

  @Around("pnct()")
  public Object aroundPnct(ProceedingJoinPoinbt pjp) throws Throwable {
    return pjp.proceed();
  }
}

并在上下文文件中:

<aop:aspectj-autoproxy />

但是someBeanAlias无法解析,因此不会为someBeanAlias别名后面的bean创建代理。

我检查了代码,但由于beanFactory中缺少org.springframework.aop.aspectj.AspectJExpressionPointcut.BeanNameContextMatcher.matchesBeanName而发生这种情况。似乎此工厂仅通过BeanFactoryAware接口设置,在org.springframework.aop.aspectj.annotation.AbstractAspectJAdvisorFactory.createPointcutExpression(Method, Class, String[])中手动创建切入点时不使用该接口。

我错过了什么或者是个错误吗?

我使用spring 3.2.5

2 个答案:

答案 0 :(得分:0)

我不是Spring用户,但是快速搜索告诉我这个问题应该从2.5.3开始修复。也许你想评论或重新打开票证,或者创建一个指向旧票证的新票证:

https://jira.spring.io/browse/SPR-4601

答案 1 :(得分:0)

我已经测试了你的场景,甚至在Spring 2.5.3中都没有(SPR-4601版本已经修复),它不适用于@AspectJ风格。

另一方面,它在xml(2.5.3到4.0.4的所有版本)中都有效:

    <aop:config>
        <aop:aspect ref="aliasAdvice">
            <aop:pointcut id="pnct" 
                expression="execution(* *(..)) &amp;&amp; bean(someBeanAlias)" />
            <aop:around method="around" pointcut-ref="pnct" />
        </aop:aspect>
    </aop:config>

目前,如果可能,您可以使用xml方法。我认为对抗春天的新JIRA问题不会受到伤害。