【发布时间】:2021-09-17 08:53:10
【问题描述】:
我有这样的 aop xml 配置:
<aop:config>
<aop:pointcut id="serviceMethod" expression="execution(* egovframework.example..impl.*Impl.*(..))" />
<aop:aspect ref="exceptionTransfer">
<aop:after-throwing throwing="exception" pointcut-ref="serviceMethod" method="transfer" />
</aop:aspect>
</aop:config>
<bean id="exceptionTransfer" class="bla.bla.DefaultExceptionTransfer">
</bean>
可以看到<aop:aspect ref="exceptionTransfer">这一行表示切面与下面的bean链接。
现在我想将其转换为基于 java 注释。我做了什么:
@Configuration
@Aspect
public class ContextExceptionHandlerAspectConfiguration {
@Pointcut("execution(* egovframework.example..impl.*Impl.*(..))")
public void serviceAnnotation() { }
//HOW TO WRITE AFTER THROWING
@Bean
public ExceptionTransfer exceptionTransfer() {
return new DefaultExceptionTransfer();
}
}
问题是我不知道如何编写代码来将方面与异常传输联系起来。请帮忙,谢谢
【问题讨论】:
-
您是否尝试简单地为您的目标包激活组件扫描并在您的方面添加
@Component注释?那么您将不再需要任何@Bean工厂方法。此外,方面不应有任何@Configuration注释。而是将该注释添加到您的配置类中。配置是配置,aspcet 是方面。不要混合它们,应用关注点分离原则以获得可维护的应用程序。 Spring 配置不像普通的 Spring 组件/bean。 -
您的意思是我需要将
@Component放置到方面并将@Bean移动到另一个类? -
是的,
@Component @Aspect。如果组件扫描处于活动状态并且DefaultExceptionTransfer也有@Component注释,则不需要@Bean。仅当您想手动连接 bean 时,才可以在单独的@Configuration类中使用@Bean。你读过 Spring 手册吗?
标签: java spring aop aspectj spring-aop