SpringAOP切面编程实践建议

背景

AOP,面向切面编程,理念深入人心,使用范围也很广。

在日常开发中,我们经常用Spring AOP实现一些横向功能复用,比如下列场景

  • 方法或外部接口调用增加入参出参及耗时日志

  • 拦截方法调用增加本地或远端分发

  • 接口增加鉴权或限流逻辑

大部分情况下,我们实现AOP功能时,切点通常采用@Pointcut注解描述,采用execution表达式形式如@Pointcut("execution(* cn.biz.abc.xyzClass.methodA(..))")。这种实现方式有没有什么缺点呢?

缺点

execution表达式形式有2个缺点,

  1. 切点表达式写死,与织入逻辑有些耦合。新增切点需要修改表达式或者让方法签名满足表达式要求。
  2. 切入点代码与织入逻辑代码无法在IDE中关联,不容易找到代码入口,不利于代码维护。

解决方法

使用自定义注解标记要切入的方法。

对应的Pointcut注解采用@target、@within、@annotation等表达式形式。

而且,Spring的事务注解@Transaction、异步注解@Async等都是采用注解形式。

好处

  1. 切点和织入逻辑不耦合。哪里要aop,哪里就加注解,很灵活。

  2. 注解让切点有明确的标记,方便维护人员理解代码。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值