前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot使用AOP

SpringBoot使用AOP

作者头像
wo.
发布2021-06-15 11:16:09
4770
发布2021-06-15 11:16:09
举报
文章被收录于专栏:了不得的专栏

众所周知AOP(Aspect Oriented Programming)是Spring的核心之一,是OOP面向对象编程的延续和补充,是面向切面编程,他的底层实现是代理模式,简单来说,代理模式分为静态代理模式和动态代理模式,而代理模式又分为JDK动态代理和CGLib代理,AOP则是基于动态代理实现,默认是使用JDK动态代理,若没有接口则会使用CGLib代理,前者基于接口,后者基于子类,若兴趣深入了解代理模式的,可参考 Java代理模式 一文,下面简单说下AOP的基本概念.

AOP的适用场景:
  • 日志记录
  • 事务处理
  • 异常处理
  • 性能统计
  • 拦截鉴权
  • 缓存
  • 等等..
AOP的组成
  • Aspect(切面):通常是一个类,存放公共功能,可以在里面定义切入点和通知
  • JoinPoint(连接点):程序执行过程中可以插入的切面的点,一般是方法调用,异常抛出
  • Advice(通知):是切面的具体实现,在切入点上执行的逻辑处理,以目标方法为参照点,根据放置位置的不同,可分为前置通知(Before)、后置通知(AfterReturning)、异常通知(AfterThrowing)、最终通知(After)和环绕通知(Around).
  • PointCut(切入点):带有通知的连接点
AOP通知类型(Advice)的介绍
  • @before(前置通知):在目标方法执行前先执行此方法
  • @after(后置):在目标方法执行后执行
  • @AfterReturning(最终返回):在目标方法正常完成之后
  • @AfterThrowing(异常通知):在目标方法抛出异常时执行
  • @Around(环绕通知):在目标方法执行前后都执行
下面是SpringBoot使用AOP实现的鉴权案例

先贴代码

以上案例是使用注解的方式用AOP实现的登录拦截,发起请求需要带token的请求头,若不带token的请求头,就会被拦截,提示当前未登录. 程序运行结果

1.不带token请求

2.带token请求

以上是使用注解的方式实现AOP,AOP也可用Execution表达式实现,注解方式适合切割较为分散的,如果一大片还是需要用Excution表达式来实现.,有兴趣,可自行实现.

分享在写案列时候的一个Java的坑

在判断请求头时,最先使用了java中的isEmpty()判空方法,结果异常的时候直接报500,不抛出定义的异常信息,最后发现,Java的isEmpty()方法判断是length长度,而判断的值可能是null.

isEmpty()方法的源码

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • AOP的适用场景:
  • AOP的组成
  • AOP通知类型(Advice)的介绍
  • 下面是SpringBoot使用AOP实现的鉴权案例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档