我有以下方式定义的方面:
@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
答案 0 :(得分:0)
我不是Spring用户,但是快速搜索告诉我这个问题应该从2.5.3开始修复。也许你想评论或重新打开票证,或者创建一个指向旧票证的新票证:
答案 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(* *(..)) && bean(someBeanAlias)" />
<aop:around method="around" pointcut-ref="pnct" />
</aop:aspect>
</aop:config>
目前,如果可能,您可以使用xml方法。我认为对抗春天的新JIRA问题不会受到伤害。