动态代理简单讲解

来源:互联网 发布:网络翻唱歌手 编辑:程序博客网 时间:2024/06/05 00:48

1. 什么是代理:

 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。

代理的优点:

优点一:可以隐藏委托类的实现;
优点二:可以实现客户与委托类间的解耦,在不修改委托类代码的情况下能够做一些额外的处理。


 静态代理:
若代理类在程序运行前就已经存在,那么这种代理方式被成为 静态代理 ,
这种情况下的代理类通常都是我们在Java代码中定义的。 通常情况下, 
静态代理中的代理类和委托类会实现同一接口或是派生自相同的父类。

静态代理的局限:在于运行前必须编写好代理类。


动态代理:
代理类在程序运行时创建的代理方式被称为 动态代理。

也就是说,代理类并不是在Java代码中定义的,
而是在运行时根据我们在Java代码中的“指示”动态生成的。
相比于静态代理, 动态代理的优势在于可以很方便的对代理类的函数进行统一的处理,而不用修改每个代理类的函数。


动态代理关系:由两组静态代理关系组成,这就是动态代理的本质!


这里主要讲解动态代理!

  


动态代理的原理:
首先通过newProxyInstance方法获取代理类实例,
而后我们便可以通过这个代理类实例调用代理类的方法,
对代理类的方法的调用实际上都会调用中介类(调用处理器)的invoke方法,
在invoke方法中我们调用委托类的相应方法,并且可以添加自己的处理逻辑。




JDK动态代理中包含一个类和一个接口: 
InvocationHandler接口: 

public interface InvocationHandler { 
public Object invoke(Object proxy,Method method,Object[] args) throws Throwable; 



参数说明: 
Object proxy:指被代理的对象。 
Method method:要调用的方法 
Object[] args:方法调用时所需要的参数 


下面是我的一个小demo:


1.一个接口:




2.一个类实现这个接口:


3:代理类实现InvocationHandler接口




4.最终的测试类:







希望能帮到你!












0 0