文章目录
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配置文件