一.什么是代理模式?
是指具有与被代理对象相同接口的类,客户端通过访问代理类接口就可以间接的访问到被代理对象接口,代理对象可以在目标对象和客户端之间起动中介和保护目标对象的作用,可扩展性强
代理类作用:
1.扩展:扩展被代理对象接口功能
2.转发:转发到被代理对象接口中
二.分类
代理分为:静态代理和动态代理,静态代理这里就不说了,动态代理常见的有两种实现方式:JDK动态代理和CGLIB动态代理:
1.JDK动态代理类
优点:只需要编写一次,就可以代理不同的目标对象了
缺点:目标对象必须实现接口,否则将无法进行代理
关键类以及接口:
Proxy:
所有动态代理类的父类,提供一系列的静态方法来创建动态代理类
InvocationHandler:
每个动态代理类都必须实现InvocationHandler接口,并且每个代理类的实例都关联到一个handler,当我们通过代理对象调用一个方法时, 会通过handler转发给目标对象对应的方法
2.CGLIB动态代理类
CGLIB:Java字节码操控框架,它能被用来动态生成类或者增强已有类的功能
CGLIB生成动态代理类
优点是:目标对象不用实现接口,采用fastClass机制比JDK动态代理执行快
缺点是:被final修饰的目标对象就无法进行代理,需要第三方jar
具体实现看代码吧!
代码githup地址:https://github.com/RenPengLiang/proxy.git