Spring-静态/动态代理模式

静态代理

静态代理角色分析

抽象角色:一般使用接口或者抽象类来实现

真实角色:被代理的角色

代理角色:代理真实角色,代理真实角色后,一般会做一些附属的操作

客户:使用代理角色来进行一些操作

示例代码

抽象角色:租房

真实角色:房东要出租房子

代理角色:中介带客户看房子,租房子,收中介费。

客户:找中介,中介代理房东

静态代理的优点

使得真实角色更加纯粹

公共的业务由代理来完成,实现了业务的分工

公共业务发生扩展时变得更加集中和方便

缺点:

类多了,多了代理,工作量增加,开发效率低。

静态代理再理解

1.创建一个抽象角色:增删改查业务

创建真是对象,完成增删改查操作

设置代理角色,增加日志的实现


代理模式作用:在不改变原有代码的情况下,实现了对原有功能的增强

AOP的核心思想

动态代理

动态代理和静态代理的角色一样

动态代理的代理类是动态生成的,静态代理的代理类是我们提前写好的

动态代理分为两类:一类是基于接口动态代理,一类是基于类的动态代理

基于接口的动态代理--JDK动态代理

基于类的动态代理--cglib

JDK动态代理需要了解两个类:InvocationHandler和Proxy

InvocationHandler是由代理实例的调用处理程序实现的接口。每个代理实例都有一个关联的调用处理程序。当在实例上调用方法时,方法调用将被编码并分派到其调用处理程序的invoke方法

proxy-调用该方法的代理实例

method-所述方法对应于调用代理实例上的接口方法的实例。方法对象的声明类将是该方法声明的接口。

Proxy 代理

提供了创建动态代理类和实例的静态方法,它也是由这些方法创建的所有动态代理类的超类。

第一个参数classLoader --类加载器来定义代理类

第二个参数interfaces-代理类实现的接口列表

第三个参数h--调度方法调用的调用处理函数

代码实现


核心:一个动态代理一般代理某一类业务,一个动态代理可以代理多个类,代理的是接口。

如下:同样可以代理用户业务增删改查

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章