Настройка аспектов AspectJ с помощью Spring IoC с JavaConfig?
согласно документации Spring настройка аспектов AspectJ с помощью Spring IoC для настройки аспекта для Spring IOC необходимо добавить в конфигурацию xml следующее:
<bean id="profiler" class="com.xyz.profiler.Profiler"
factory-method="aspectOf">
<property name="profilingStrategy" ref="jamonProfilingStrategy"/>
</bean>
как предложил @SotiriosDelimanolis, переписывая это как следующее В JavaConfig должно работать:
@Bean
public com.xyz.profiler.Profiler profiler() {
com.xyz.profiler.Profiler profiler = com.xyz.profiler.Profiler.aspectOf();
profiler.setProfilingStrategy(jamonProfilingStrategy()); // assuming you have a corresponding @Bean method for that bean
return profiler;
}
однако это работает только в том случае, если Profiler
аспект написан на родном aspectj .aj
синтаксис. Если он написан на Java и аннотировано с @Aspect
, Я получаю следующее сообщение об ошибке:
метод aspectOf () не определен для профилировщика типов
есть ли эквивалентный способ написания этого с помощью JavaConfig для аспектов, написанных с синтаксисом @AspectJ?
2 ответов
оказывается, что есть org.aspectj.lang.Aspects
класс для обеспечения именно этой цели. Похоже, что aspectOf()
метод добавляется LTW, поэтому он отлично работает в конфигурации XML, но не во время компиляции.
чтобы обойти это ограничение, org.aspectj.lang.Aspects
предоставляет aspectOf()
способ:
@Bean
public com.xyz.profiler.Profiler profiler() {
com.xyz.profiler.Profiler profiler = Aspects.aspectOf(com.xyz.profiler.Profiler.class);
profiler.setProfilingStrategy(jamonProfilingStrategy()); // assuming you have a corresponding @Bean method for that bean
return profiler;
}
надеюсь, что это поможет кому-то еще в будущем.
есть ли эквивалентный способ написания этого с помощью JavaConfig?
почти всегда.
@Bean
public com.xyz.profiler.Profiler profiler() {
com.xyz.profiler.Profiler profiler = com.xyz.profiler.Profiler.aspectOf();
profiler.setProfilingStrategy(jamonProfilingStrategy()); // assuming you have a corresponding @Bean method for that bean
return profiler;
}
на factory-method
объясняется в документации в создание экземпляра статическим заводским методом.