首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

探秘SpringAop(一)

常用的编程范式

AOP 是什么

是一种编程方式,不是编程语言

解决特定问题,不能解决所有的问题

OOP的补充,不是代替

AOP 初衷

DRY: Don't repeat yourself(代码重复)

SoC:Separation of Concerns(关注点分离)

水平分离:展示层-> 服务层 -> 持久层

垂直分离:模块划分(订单、库存等)

切面分离:分离功能性需求与非功能性需求

AOP的优点

集中处理某一关注点/横切逻辑

可以很方便地添加/删除关注点

侵入性少,增强代码可读性及可维护性

AOP的应用场景

权限控制

缓存控制

性能监控

...

支持AOP的语言

Java、Python、PHP...

SpringAOP使用详解

首先,我整理了一张图,让大家更好的梳理SpringAOP的使用

@Poincut 详解匹配包/类型_ within()匹配对象匹配参数 args()

匹配任何以find开头而且只有一个Long参数的方法

@Pointcut("execution(*..find(Long))")

匹配任何以find开头的而且第一个参数为Long型的方法

@Pointcut("execution(*..find(Long,..))")

匹配任何只有一个Long参数的方法

@Pointcut("within(com.zhb..*) && args(Long)")

匹配第一个参数为Long型的方法

@Pointcut("within(com.zhb..*) && args(Long,..)")

匹配注解

匹配方法标注有AdminOnly的注解的方法

@Pointcut("@annotation(com.zhb.anno.AdminOnly) && within(com.zhb..*)")

匹配标注有NeedSecured的类底下的方法 //class级别

@Pointcut("@within(com.zhb.anno.NeedSecured) && within(com.zhb..*)")

匹配标注有NeedSecured的类及其子类的方法 //runtime级别

在spring context的环境下,二者没有区别

@Pointcut("@target(com.zhb.anno.NeedSecured) && within(com.zhb..*)")

匹配传入的参数类标注有Repository注解的方法

@Pointcut("@args(com.zhb.anno.NeedSecured) && within(com.zhb..*)")

匹配方法

匹配任何公共方法

@Pointcut("execution(public * com.zhb.service..(..))")

匹配com.zhb包及子包下Service类中无参方法

@Pointcut("execution(* com.zhb..Service.())")

匹配com.zhb包及子包下Service类中的任何只有一个参数的方法

@Pointcut("execution(* com.zhb..Service.(*))")

匹配com.zhb包及子包下任何类的任何方法

@Pointcut("execution(* com.zhb...(..))")

匹配com.zhb包及子包下返回值为String的任何方法

@Pointcut("execution(String com.zhb...(..))")

匹配异常

execution(public * com.zhb.service..(..) throws java.lang.IllegalAccessException)

其实,这么多实际工作中用到的比较少,我平时就用过execution 这一个。

Advice 详解

@Before(value = "matchLongArg() && args(productId)")

public void beforeWithArgs(Long productId)

@AfterReturning(value = "matchReturn()",returning = "returnValue")

public void getReulst(Object returnValue)

给出一段常用代码

大家再用到的时候可以自行搜索

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180718G081TW00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券