Spring-AOP

代理模式

代理模式的两个设计原则:

  1. 代理类 与委托类具有相似的行为(共同)
  2. 代理类增强委托类的行为
    代理模式分为两类:静态代理和动态代理及批量化代理(aop)

一.静态代理

为某个对象提供一个代理,代理角色固定,以控制对这个对象的访问。 代理类和
委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代。
代理类负责请求的预处理、过滤、将请求分派给委托类处理、以及委托类执行完请求后后续处理。

二 .动态代理

相比于静态代理,动态代理在创建代理对象上更加的灵活,它会根据需要通过反射机
制在程序运行期动态的为目标对象创建代理对象,代理的行为可以代理多个方法
即满足
生产需要的同时又达到代码通用的目的。
动态代理的两种实现方式

三.CGLLIB 动态代理

code generator library ,操作字节码。 与 jdk 提供的代理区别,Proxy:委托类必
须有接口,制作过程比较快,执行慢;cglib:委托类可以没有接口,继承的思维来实现相
似性,制作代理过程比较慢,执行快。主要解决没有接口类的代理实现。

Aop 基本概念

Joinpoint(连接点)

被拦截到的每个点,spring 中指被拦截到的每一个方法,spring aop 一个连接点
即代表一个方法的执行。

Pointcut(切入点)

对连接点进行拦截的定义(匹配规则定义 规定拦截哪些方法,对哪些方法进行处
理),spring 这块有专门的表达式语言定义。 Advice(通知)
拦截到每一个连接点即(每一个方法)后所要做的操作
i. 前置通知 (前置增强) --before() 执行方法前通知
ii.返回通知(返回增强)–afterReturn 方法正常结束返回后的通知
iii.异常抛出通知(异常抛出增强)–afetrThrow()
iv.最终通知—after 无论方法是否发生异常,均会执行该通知。
v.环绕通知—around 包围一个连接点(join point)的通知,如方法调用。这是最强
大的一种通知类型。 环绕通知可以在方法调用前后完成自定义的行为。它也会选择是否继
续执行连接点或直接返回它们自己的返回值或抛出异常来结束执行。

Aspect(切面)

切入点与通知的结合,决定了切面的定义,切入点定义了要拦截哪些类的哪些方法,
通知则定义了拦截过方法后要做什么,切面则是横切关注点的抽象,与类相似,类是对物
体特征的抽象,切面则是横切关注点抽象。

Target(目标对象)

被代理的目标对象

Weave(织入)

将切面应用到目标对象并生成代理对象的这个过程即为织入。

Introduction(引入)

在不修改原有应用程序代码的情况下,在程序运行期为类动态添加方法或者字段的过
程称为引入

代理模式实现三要素

i.接口定义
ii.目标对象 与代理对象必须实现统一接口
iii.代理对象持有目标对象的引用 增强目标对象行为

== 代理模式实现分类以及对应区静态代理:==手动为目标对象制作代理对象,即在程序编译阶段完成代理对象的创建
==动态代理:==在程序运行期动态创建目标对象对应代理对象jdk 动态代理:被代理目标对象必须实现某一或某一组接口 实现方式 通过回调创
建代理对象。
cglib 动态代理被代理目标对象可以不必实现接口,继承的方式实现。
动态代理相比较静态代理,提高开发效率,可以批量化创建代理,提高代码复用率

3. Aop 理解

i. 面向切面,相比 oop 关注的是代码中的层 或面
ii.解耦,提高系统扩展性
iii. 提高代码复用

Aop 关键词

1. 连接点:每一个方法
2. 切入点:匹配的方法集合
3. 切面:连接点与切入点的集合决定了切面,横切关注点的抽象
4. 通知:几种通知
5. 目标对象:被代理对象
6. 织入:程序运行期将切面应用到目标对象 并生成代理对象的过程
7. 引入:在不修改原始代码情况下,在程序运行期为程序动态引入方法或字段的过程

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值