You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:45:02