this 导致 aop 失效

this 导致 aop 失效

情况说明

在springboot中,常存在this 导致 aop 失效的情况

//这个方法有注解 @DataScope
@Override
@DataScope(deptAlias = "d", userAlias = "u")
public List<SysUser> selectUserList(SysUser user) {
    return userMapper.selectUserList(user);
}

//这个方法无注解 @DataScope,但调用有注解的方法 selectUserList 时,如果使用 this,会导致aop失效,无法增强这个方法
@Override
@Transactional(rollbackFor = Exception.class)
public String importUserPhotos(MultipartFile file, String userType, LoginUser loginUser) throws Exception {
    SysUser sysUser = new SysUser();
    sysUser.setUserType(userType);
    //ISysUserService service = (ISysUserService) AopContext.currentProxy();
    //List<SysUser> sysUsers = service.selectUserList(sysUser);
    List<SysUser> sysUsers = this.selectUserList(sysUser);
}

解决方案:

//用这种方式获取代理对象
ISysUserService service = (ISysUserService) AopContext.currentProxy();
List<SysUser> sysUsers = service.selectUserList(sysUser);

//配置类种开启下面的设置(启动类中应该也行),表示通过aop框架暴露该代理对象,AopContext能够访问
@EnableAspectJAutoProxy(exposeProxy = true)

现直接做一个调试说明记录

当使用

ISysUserService service = (ISysUserService) AopContext.currentProxy()

如图所示

在这里插入图片描述

获取的是CGLIB代理对象,所以能走到增强的方法中

---------------分割线-----------------

如果直接使用this,如下图所示,就只是会调实现类自己,实现类中就没有增加的那些代码,所以注解失效:

在这里插入图片描述

如果有用多点赞,或者也可以提供其他方案哈

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值