如何将XML配置的Spring AOP AfterThrowing通知转为注解式配置
解决方案
你当前的写法存在逻辑偏差:原XML中exceptionTransfer对应的Bean本身就是切面实例,你误将@Aspect注解加在了配置类而非切面Bean上。下面提供两种可直接使用的实现方案:
方案1:无需修改原有DefaultExceptionTransfer类,基于现有配置类调整
@Configuration @Aspect @EnableAspectJAutoProxy // 必须添加此注解开启注解式AOP支持 public class ContextExceptionHandlerAspectConfiguration { // 注入切面Bean @Autowired private ExceptionTransfer exceptionTransfer; @Pointcut("execution(* egovframework.example..impl.*Impl.*(..))") public void serviceMethod() { } // 配置异常抛出后通知,对应原XML的<aop:after-throwing>配置 @AfterThrowing(pointcut = "serviceMethod()", throwing = "exception") public void afterThrowingHandle(Exception exception) { // 调用切面的transfer方法完成逻辑 exceptionTransfer.transfer(exception); } @Bean public ExceptionTransfer exceptionTransfer() { return new DefaultExceptionTransfer(); } }
方案2:符合注解AOP规范的原生写法,和原XML逻辑完全对齐
第一步修改DefaultExceptionTransfer类,直接将其声明为切面:
@Aspect public class DefaultExceptionTransfer implements ExceptionTransfer { @Pointcut("execution(* egovframework.example..impl.*Impl.*(..))") public void serviceMethod() { } @AfterThrowing(pointcut = "serviceMethod()", throwing = "exception") @Override public void transfer(Exception exception) { // 原有的异常转换逻辑保持不变即可 } }
第二步配置类仅需声明Bean和开启AOP支持:
@Configuration @EnableAspectJAutoProxy public class ContextExceptionHandlerAspectConfiguration { @Bean public ExceptionTransfer exceptionTransfer() { return new DefaultExceptionTransfer(); } }
内容的提问来源于stack exchange,提问作者SoT
相关产品推荐
相关产品推荐

