Springboot使用aspectj所有的局限性

背景

aspectj是Springboot很简洁明了的声明式aop实现方式。项目中需要对数据进行权限划分处理,需要给每个数据打上权限相关参数标签。所以使用spring的aop进行处理。

坑x01

aspectj 在通过 @Pointcut("execution()")进行定义切面的时候。其实是不支持匹配目标类的父类方法的。具体来说,是无法拦截到目标类中没有实现的方法,如果方法是定义在父类或者实现的接口上,则无法拦截。解决方式就是,子类声明改方法,并且在声明中调用。

代码

@Pointcut("execution(* com.hikvision.fj.core.overview.service..*.saveOrUpdate(..)))")
public void saveOrUpdateSubOpreation() {

}
@Service
public class GovOpennessArticleServiceImpl extends ServiceImpl<GovOpennessArticleMapper, GovOpennessArticlePo> implements IGovOpennessArticleService {
    public boolean saveOrUpdate(GovOpennessArticlePo entity) {
        return super.saveOrUpdate(entity);
    }
}

比如如上代码,需要在GovOpennessArticleServiceImpl 当中声明saveOrUpdate方法,在其中调用super方法,才可拦截。

坑x02

aspectj 无法拦截依赖中的包接口,例如mybatis plus的service的impl包下的内容

我认为也许和mybatis plus的实现方式有关,具体信息目前没有时间详细深入的研究,后续会研究一下需要如何做到实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值