Spring中AOP的实现
在了解aop之前,先来认识一下静态代理和动态代理
2.1 代理模式
- 代理模式为SpringAop的底层
- 代理模式优点
- 可以使角色更加纯粹,不用去关注一些公共的业务
- 实现业务的分工
- 公共业务发生扩展的时候,可以公共管理
- 代理模式缺点
- 一个真实角色就会产生一个代理角色,代码量会翻倍
静态代理
- 代理角色分析
- 抽象角色:一般会使用接口或抽象类来解决
- 真实角色:被代理的角色
- 代理角色:一般会做些附属操作
- 客户:访问代理对象的人
- 实现步骤
- 接口
- 真实角色
- 代理角色
- 客户端访问角色
动态代理
-
角色分析
- 角色同静态
- 代理类是动态生成
- 基于接口的动态代理
- 基于接口 — JDK动态代理
- 基于类的动态代理
- cglib
-
使用
- Proxy类
- InvocationHandler类
- 本质是使用反射机制来实现
-
动态代理优点
- 一个动态代理的是一个接口,一般就是对应的是一类业务
- 一个动态代理类可以代理多个类,只要是实现了同一个接口即可
2.8 spring使用aop
- 代理和aop的关系
- 使用接口
方式1:使用spring原生接口
- 配置xml文件
- 注册bean
- 配置aop
- 配置aop约束
- 配置切入点
- 配置表达式(定位切入点)
- 执行环绕增加,将类添加掉切入点上面
方式2:自定义类
- 将自定义的类加载到bean
- 自定义切面,ref为要引用的类
- 定义切入点
- 定义通知
方式3:使用注解实现
- 增加注解@Aspect,定义为切面类
- @Before(“execution(* 类路径,*(…)”),在方法前面使用
- @After
- Around,在环绕增强中,给定一个参数名代表我们要获取处理切入的点
- 配置xml文件,定义注解类bean
- 开启注解支持