псевдонимы не используются для стиля @AspectJ aop

1

У меня есть аспект, определяемый следующим образом:

@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 не может быть разрешен, и, следовательно, прокси не создается для bean- someBeanAlias за псевдонимомBeanAlias.

Я проверил код, и это происходит из-за отсутствия beanFactory в org.springframework.aop.aspectj.AspectJExpressionPointcut.BeanNameContextMatcher.matchesBeanName. Кажется, что эта фабрика устанавливается только через интерфейс BeanFactoryAware который не используется, когда pointcut создается вручную в org.springframework.aop.aspectj.annotation.AbstractAspectJAdvisorFactory.createPointcutExpression(Method, Class, String[]).

Я что-то упустил или это ошибка?

Я использую spring 3.2.5

  • 0
    Это прекрасно работает для меня. Можем ли мы увидеть ваше объявление компонента и его псевдонимы и как вы сканируете компонент?
Теги:
aspectj
spring-aop

2 ответа

0

Я протестировал ваш сценарий и даже не весной 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 против весны, я думаю, не повредит.

0

Я не пользователь Spring, но быстрый поиск показывает мне, что эта проблема должна была быть исправлена с 2.5.3. Возможно, вы хотите прокомментировать или снова открыть билет или создать новый, указывающий на старый:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню