代理模式

2016-11-18  本文已影响8人  heiheiwanne

代理模式

定义:给某个对象提供一个代理对象,并由代理对象控制对于原对象的访问,即客户不直接操控原对象,而是通过代理对象间接地操控原对象。
代理模式UML图
要理解代理模式很简单,其实生活当中就存在代理模式:
火车票代售

静态代理:代理类是在编译时就实现好的。也就是说 Java 编译完成后代理类是一个实际的 class 文件。
动态代理:代理类是在运行时生成的。也就是说 Java 编译完之后并没有实际的 class 文件,而是在运行时动态生成的类字节码,并加载到JVM中。
//========那动态代理就跟类加载器差不多,都是要生成字节码文件 动态代理是直接生成字节码文件

根据类加载器与接口数组唯一生成一个代理类对象(其实就是实现了接口的类,只不过是代码动态生成的,照这样说也可以生成委托类的子类)

动态代理public final。特点?
Java 实现动态代理的缺点:因为 Java 的单继承特性(每个代理类都继承了 Proxy 类),只能针对接口创建代理类,不能针对类创建代理类。

Java 动态代理的内部实现 自动生成的代理类的代码是
public final class $Proxy1 extends Proxy implements Subject{
private InvocationHandler h;
private $Proxy1(){}
public $Proxy1(InvocationHandler h){
this.h = h;
}
public int request(int i){
Method method = Subject.class.getMethod("request", new Class[]{int.class}); //创建method对象
return (Integer)h.invoke(this, method, new Object[]{new Integer(i)}); //调用了invoke方法
}
}

动态代理是动态new了一个实现类,作为了代理类的一个成员变量,通过通过调用接口的方法,回调了proxy.invoke(),再调用了实现类的方法

最近学到相关的后端知识Spring的AOP知识,用的就是JDK的动态代理以及CGLiB(动态字节码增强技术)
相关阅读: Spring AOP 深入剖析

java的动态代理机制详解

动态代理
上一篇下一篇

猜你喜欢

热点阅读