静态代理
静态代理角色分析
抽象角色:一般使用接口或者抽象类来实现
真实角色:被代理的角色
代理角色:代理真实角色,代理真实角色后,一般会做一些附属的操作
客户:使用代理角色来进行一些操作
示例代码
抽象角色:租房
真实角色:房东要出租房子
代理角色:中介带客户看房子,租房子,收中介费。
客户:找中介,中介代理房东
静态代理的优点
使得真实角色更加纯粹
公共的业务由代理来完成,实现了业务的分工
公共业务发生扩展时变得更加集中和方便
缺点:
类多了,多了代理,工作量增加,开发效率低。
静态代理再理解
1.创建一个抽象角色:增删改查业务
创建真是对象,完成增删改查操作
设置代理角色,增加日志的实现
代理模式作用:在不改变原有代码的情况下,实现了对原有功能的增强
AOP的核心思想
动态代理
动态代理和静态代理的角色一样
动态代理的代理类是动态生成的,静态代理的代理类是我们提前写好的
动态代理分为两类:一类是基于接口动态代理,一类是基于类的动态代理
基于接口的动态代理--JDK动态代理
基于类的动态代理--cglib
JDK动态代理需要了解两个类:InvocationHandler和Proxy
InvocationHandler是由代理实例的调用处理程序实现的接口。每个代理实例都有一个关联的调用处理程序。当在实例上调用方法时,方法调用将被编码并分派到其调用处理程序的invoke方法
proxy-调用该方法的代理实例
method-所述方法对应于调用代理实例上的接口方法的实例。方法对象的声明类将是该方法声明的接口。
Proxy 代理
提供了创建动态代理类和实例的静态方法,它也是由这些方法创建的所有动态代理类的超类。
第一个参数classLoader --类加载器来定义代理类
第二个参数interfaces-代理类实现的接口列表
第三个参数h--调度方法调用的调用处理函数
代码实现
核心:一个动态代理一般代理某一类业务,一个动态代理可以代理多个类,代理的是接口。
如下:同样可以代理用户业务增删改查
网友评论