【笛子的Spring5学习】AOP介绍

1 基本概念

(1)面向切面编程,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得逻辑各部分间的耦合度降低,提供程序可重用性,提高开发效率
(2)主要意图:将日志记录,性能统计,安全控制,异常处理,登录功能等代码从业务代码中分离出来,不修改源代码,在主干中新增新的功能

2 底层原理

2.1 AOP底层使用动态代理

(1)有接口情况,使用JDK动态代理
创建接口实现类代理对象,增强类的方法
在这里插入图片描述
(2)无接口情况,使用CGLIB动态代理
创建子类的代理对象,增强类的方法
在这里插入图片描述

2.2 JDK动态代理代码举例

(1)调用newProxyInstance方法
在这里插入图片描述
(2)编码举例(就是一个动态代理的过程实现)
① 原始对象代码
在这里插入图片描述

② 创建代理对象代码
在这里插入图片描述在这里插入图片描述
③ 创建接口实现类代理对象
在这里插入图片描述

2.3 AOP术语

(1)连接点
类里面哪些方法可以被增强,这些方法称为连接点
(2)切入点
实际被真正增强的方法,称为切入点
(3)通知(增强)

  • 实际增强的逻辑部分称为通知(增强),比如在登录功能中新增的权限判断,这个新增的“权限判断”即为通知
  • 包含前置、后置、环绕、异常、最终通知几种
    (4)切面
    是动作,把通知应用到切入点的过程就是切面

2.4 AOP准备工作

使用前需要提前导入包
1、Spring框架一般基于AspectJ实现AOP操作
(1)什么是AspectJ?
AspectJ不是Spring的组成部分,独立AOP框架,一般把AspectJ和Spring框架一起使用,进行AOP操作
2、基于AspectJ实现AOP操作
(1)基于xml配置文件实现
(2)基于注解方式实现(常用)
3、切入点表达式(配置时会用到)
(1)作用:知道对哪个类里面的哪个方法进行增强
(2)语法结构
execution([权限修饰符] [返回类型] [类全路径] [方法名称] ([参数列表]))
在这里插入图片描述

2.5 AOP操作(AspectJ注解)

1、创建类,在类中创建方法(需要被增强的类)
2、创建增强类(编写增强方法)
编写不同方法,让不同方法对应不同的通知类型
3、进行通知的配置
(1)在Spring配置文件中,开启注解扫描
和前一部分IOC容器中介绍的一样,可以使用配置文件,也可以使用配置类
在这里插入图片描述
(2)使用注解创建User和UserProxy对象(即增强类和被增强类)
在这里插入图片描述
(3)在增强类上面添加注解@Aspect
在这里插入图片描述
(4)在spring配置文件中开启生成代理对象
在这里插入图片描述
4、配置不同类型的通知
(1)在增强类的里面,在作为通知方法上面添加通知类型注解,在注解中使用切入点表达式配置
在这里插入图片描述
(2)几种类型的通知注解
其中比较特殊的是环绕通知@Around,通过proceedingJoinPoint.proceed() 可以决定切入点的执行位置
在这里插入图片描述
@After是在方法之后执行 @AfterReturning是在得到返回值的时候就执行

@afterThrowing 抛出异常的时候才会执行

2.6 AOP细节说明

1、相同的切入点抽取
在这里插入图片描述
2、有多个增强类对同一方法进行增强,可以设置增强方法的优先级
(1)在增强类上面添加注解 @Order(数字类型值) 值越小优先级越高

2.7 AOP操作(AspectJ配置文件)

这种操作比较繁琐,了解即可——配置aop增强
在这里插入图片描述

2.8 完全注解开发

和IOC容器部分介绍的类似,使用配置类添加注解扫描和开启注解通知,不需要创建xml配置文件
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值