代理模式
代理模式是属于结构模式之一。该模式的作用主要是为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接使用另一个对象,此时代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式的实现方式有静态代理、jdk动态代理和cglib动态代理。
静态代理
静态代理是指在程序运行前代理类的.class文件就已经存在,是由程序员在编码时手动实现的。
示例如下:
定义一个接口
1 | public interface Person { |
实现类
1 |
|
代理类
1 |
|
测试
1 |
|
jdk动态代理
jdk动态代理与静态代理最大的区别就是代理类的.class文件是在运行时生成的,而且被代理类必须要实现一个接口。
示例如下,接口和被代理类和静态代理一样
代理类
1 |
|
测试
1 |
|
cglib动态代理
cglib是一个功能强大的代码生成包,其底层依赖asm框架。cglib实现动态代理最大的特点就是被代理类不需要实现接口。
示例如下
被代理类
1 | public class ActorNoInterface { |
代理类
1 |
|
测试
1 |
|