目录

  • 依赖
  • 切面
  • aspectj advice的5种类型
  • 切入点配置

spring提供了2种实现aop的方式

  • spring aop:早期版本提供的方式,只提供了简单的aop实现
  • aspectj:专业的aop框架,功能比spring aop更加强大,在spring后续的版本中已经集成了

使用最多的是aspectj,平时所说的sping aop也往往是指这种方式,此处介绍的也是aspectj的使用。

依赖

 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>

已经包含了 spring aop、aspectj 2种实现aop方式的依赖

切面

@Component  //放到容器中
@Aspect  //标识为切面
public class UserControllerAspect {/*** 配置切入点*/@Pointcut("execution(* com.chy.mall.controller.UserController.*(..))")private void pointCut() {}/*** 前置通知*/@Before("pointCut()")public void before() {System.out.println("正在执行前置通知before...");}/*** 后置通知*/@After("pointCut()")public void after() {System.out.println("正在执行后置通知after...");}/*** 返回通知,可传递目标方法的返回值** @param obj 目标方法的返回值*/@AfterReturning(value = "pointCut()", returning = "obj")public void afterReturning(Object obj) {System.out.println("正在执行返回通知afterReturning...");System.out.println("目标方法的返回值是:" + obj);}/*** 异常通知,可传递异常对象*/@AfterThrowing(value = "pointCut()", throwing = "e")public void afterThrowing(JoinPoint point, Exception e) {System.out.println("正在执行异常通知afterThrowing...");System.out.println("异常信息:" + e.getMessage());}/*** 环绕通知*/@Around("pointCut()")public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {//前增强System.out.println("正在执行前增强...");//调用目标方法Object object = proceedingJoinPoint.proceed();//后增强System.out.println("正在执行后增强...");//返回目标方法的返回值return object;}}

环绕通知和其它通知有重叠时,在对应的其它通知之前执行。

aspectj advice的5种类型

通知类型 增强、执行时机 常见的使用场景
Before 前置通知 执行业务代码前、执行目标方法前 权限验证
AfterReturning 返回通知 执行目标方法时、在目标方法返回值之前,返回通知可以看做是插入到返回语句之前的,如果执行目标方法期间抛出了异常导致方法调用结束,不会执行返回通知。
After 后置通知 执行目标方法后(目标方法调用结束,正常返回了值或者抛出异常导致方法调用结束都算调用结束);无论执行目标方法期间是否发生异常,都会执行后置通知 关闭资源
AfterThrowing 异常通知 目标方法抛出异常后 处理异常,回滚事务
Around 环绕通知 可作用于目标方法的整个调用流程

切入点配置

定义切入点

//方法用 execution 指定
@Pointcut("execution(* com.chy.mall.controller.UserController.*(..))")
//注解用 @annotation 指定,注解的类型是 @interface,算是一种特殊的接口
@Pointcut("@annotation(com.chy.mall.annotation.UploadObs)")
* com.chy.mall.controller.UserController.*(..))返回值类型  全限定类名|接口名.方法名(参数表)
  • 如果使用接口,会代理该接口所有的实现类
  • 可使用通配符*,参数表可使用具体类型,比如(int, String),也可用(…)表示任意参数类型、参数个数。

指定切入点

//value属性指定切入点,可以直接引用其它切入点,也可以现配
@Before("pointCut()")
@Before("execution(* com.chy.mall.controller.UserController.*(..))")

SpringBoot整合AOP相关推荐

  1. SpringBoot整合AOP + 自定义注解实现简单的权限验证

    1.简介 主要通过自定义注解,使用SpringAOP的环绕通知拦截请求,判断该方法是否有自定义注解,然后判断该用户是否有该权限,这里做的比较简单. 2.项目搭建 这里是基于SpringBoot的,对于 ...

  2. 【SpringBoot】SpingBoot整合AOP

    说起spring,我们知道其最核心的两个功能就是AOP(面向切面)和IOC(控制反转),这边文章来总结一下SpringBoot如何整合使用AOP. 一.示例应用场景:对所有的web请求做切面来记录日志 ...

  3. SpringBoot之AOP面向切面编程

    什么是AOP AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开 ...

  4. 【Spring Boot】整合 AOP

    认识AOP 1.1 什么是AOP 1.2 AOP中的概念 SpringBoot整合AOP代码示例 2.1 使用execution(路径表达式) 2.2 使用annotation(注解) JoinPoi ...

  5. 【七】springboot整合redis(超详细)

    springboot篇章整体栏目: [一]springboot整合swagger(超详细 [二]springboot整合swagger(自定义)(超详细) [三]springboot整合token(超 ...

  6. java切面类整合_SpringBoot2.x【五】整合AOP切面编程

    SpringBoot2.x[五]整合AOP切面编程 面向方面编程(AOP)通过提供另一种思考程序结构的方式来补充面向对象编程(OOP). OOP中模块化的关键单元是类,而在AOP中,模块化单元是方面. ...

  7. SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例(转)...

    SpringBoot整合mybatis.shiro.redis实现基于数据库的细粒度动态权限管理系统实例 shiro 目录(?)[+] 前言 表结构 maven配置 配置Druid 配置mybatis ...

  8. 新版本springboot整合@transactional注解

    多个包就以逗号隔开,讲一下SpringBoot的事务管理,这个时候我来问一下大家,Spring事务管理的时候,尤其整合事务的时候,效果没有出现,但是那时候可能没有人说,就过去了,我就专门研究了一下,没 ...

  9. SpringBoot整合阿里Druid数据源及Spring-Data-Jpa

    SpringBoot整合阿里Druid数据源及Spring-Data-Jpa https://mp.weixin.qq.com/s?__biz=MzU0MDEwMjgwNA==&mid=224 ...

最新文章

  1. 强化学习入门教程(附学习大纲)
  2. Web离线应用解决方案——ServiceWorker
  3. Web打印的解决方案之普通报表打印
  4. kotlin将对象转换为map_在 Kotlin 的 data class 中使用 MapStruct
  5. 百练2757:最长上升子序列
  6. vue websocket 实时渲染页面
  7. html5背景切换效果,html5 游戏背景切换
  8. rfid 标签内存_RFID有源与无源的区别与联系
  9. Android OpenGL/Gralloc到framebuffer和LCD流程(六)
  10. 最新谷歌本地搜索api
  11. 热力图pycharm
  12. 经济学的思维方式 [Basic Economics A Common Sense Guide to the Econom]
  13. python 3D绘制立体几何
  14. 三子棋游戏(支持多子棋)
  15. Tomcat 启动 Dubbo 端口占用报错 Address already in use: bind
  16. 手机助手无法启动备份服务器,华为手机助手备份数据无法恢复怎么办?华为手机助手备份数据无法恢复教程...
  17. 【差分约束+spfa优化】P3084 [USACO13OPEN]Photo G
  18. 如何利用动态代理IP来做SEO(网络营销)
  19. 磁感应强度B,磁通量φ,磁场强度H,磁导率,磁链讲透了
  20. 一年的时间戳是多少?

热门文章

  1. java handler的用法_handler的用法
  2. KindEditor 文件上传漏洞漏洞
  3. Vray材质学习笔记05——黄金材质
  4. 中国农村生活垃圾处理行业战略动态及投资前景规划报告2022-2028年版
  5. 能量谱密度 功率谱密度
  6. java基础-CAS、synchronized和AQS的理解
  7. 分布式概念扫盲(Byzantine generals problem/CAP/TPC/TCC)
  8. FusionChartsnbsp;API:数字格式
  9. php 获取月份第一天和最后一天,php 获取指定月第一天和最后一天
  10. WiFi和WLAN有什么区别和联系?