深度剖析代理模式
1.1什么是代理模式
代理(Proxy)是一种设计模式,提供了间接对目标对象进行访问的方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的功能上,增加额外的功能补充,即扩展目标对象的功能.。
这就符合了设计模式的开闭原则,即在对既有代码不改动的情况下进行功能的扩展。
代理(模式如图所示:
代理模式的实现方式:
静态代理,工程师编辑代理类代码,实现代理模式;在编译期就生成了代理类。
基于JDK实现动态代理,通过jdk提供的工具方法Proxy.newProxyInstance动态构建全新的代理类(继承Proxy类,并持有InvocationHandler接口引用 )字节码文件并实例化对象返回。(jdk动态代理是由java内部的反射机制来实例化代理对象,并代理的调用委托类方法)。
基于CGlib 动态代理模式 基于继承被代理类生成代理子类,不用实现接口。只需要被代理类是非final 类即可。(cglib动态代理底层是借助asm字节码技术)。
1.2 静态代理
静态代理 是代理类在编译期间就创建好了,不是编译器生成的代理类,而是手动创建的类。在编译时就已经将接口,被代理类,代理类等确定下来。软件设计中所指的代理一般是指静态代理,也就是在代码中显式指定的代理。
实现静态代理四步骤:
①定义业务接口;
②被代理类实现业务接口;
③定义代理类并实现业务接口;
④最后便可通过客户端进行调用。<