Spring使用@Aspect遇到@After后置通知未生效的问题

新手上路,请多包涵

问题描述

请问大家,最近做的项目中我想用aop做操作日志的记录,但其中引入jar包的配置文件中配置了<aop:aspectj-autoproxy proxy-target-class="true" />强制使用cglib代理,现在我想对项目中某些接口(来源于引入jar包)实现类利用aop切面记录操作日志,但试了好几种方式都没成功,检查的切面表达式是没有问题的;目前我想到的方法是在接口实现类的业务逻辑后加上记录操作日志的逻辑,但这种方式主业务逻辑和日志处理逻辑代码就会耦合在一起,有没有哪位大佬可以帮忙指点一下?

问题出现的环境背景及自己尝试过哪些方法

尝试过的方法:
1.我试过在接口实现类配置@EnableAspectJAutoProxy(proxyTargetClass=false)这种形式,但@After后置通知并不能生效,
2.试过在项目xml配置文件中添加配置<aop:aspectj-autoproxy>使其不强制使用cglib代理;

相关代码

@After("execution(* com.nankang.gis.apps.fdcxmjc.functions.upload.after.AfterUploadFunctionPresale.afterUpload(..))")

public void after(JoinPoint joinPoint){
    //获取登录用户
    String userName = currentUserService.getCurrentUser().getUsername();
    if(userName == null){//没有管理员登录
        return;
    }
    //获取方法名
    String methodName = joinPoint.getSignature().getName();
    logger.info("get methodName:"+methodName);
    //创建日志对象
    DataImportLogVO log = new DataImportLogVO();
    log.setIMPORTID(new Random().nextInt(1000));
    log.setIMPORTTYPE(6);
    log.setIMPORTSUBTYPE(2);
    log.setIMPORTDATE(new Date());
    log.setIMPORTUSERNAME(currentUserService.getCurrentUser().getUsername());
    log.setIMPORTNAME("批预售");
    log.setRESULT(1);
    //添加日志
    logService.log(log);
}

你期待的结果是什么?实际看到的错误信息又是什么?

期待可以出现日志记录,但@After后置通知中的记录日志逻辑未生效;

阅读 2.6k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题