行业信息 > 爱加速小课堂:代理模式之动态代理的命名

爱加速小课堂:代理模式之动态代理的命名

在Java语言中有一种名为动态代理(dynamic proxy)的技术,人们将它奉为天物,如果一个容器没有使用动态代理(或者更高级的代替物),简直就会立即被时代的潮流淘汰。然而,动态代理技术原本是随J2SE 1.3于2000年发布的,为何要到两三年之后才突然变得炙手可热,这里发生了怎样曲折的故事?《动态代理的前世今生》一文中给出了详细的阐述,让我们一起来看看吧。

 

什么是动态代理?动态代理类(dynamic proxy class,下文简称代理类)是这样的一个类:可以在运行时、在创建这个类的时候才指定它所实现的接口,这些被代理类实砚的接口被称为动态接口(dynamic interface)。

 

 

代理类的实例被称为代理实例(proxy instance),每个代理实例都有一个对应的调用处理器(invocation handler)对象,该对象实现 java.lang.reflect.InvocationHandler接口。当用户通过代理接口调用代理实例的方法时,该方法调用会被分发到该实例对应的调用处理器的invoke()方法,同时传入动态接口、代表被调用方法的java.lang.reflect.Method对象、以及代表方法调用参数的一个对象数组。调用处理器可以在invoke()方法中对接收到的方法调用进行相应的处理,该方法返回的结果应该是代理实例被调用得到的结果。

 

你明白这是怎么回事了吗?噢,我也不懂,当然,原文是有着实例的,感兴趣的朋友可以去翻阅原文,这里我们讲下个知识点

 

“动态代理”这个名字从何而来?在《设计模式》书中这样写着:

Proxy(代理):对象结构型模式

意图:为其他对象提供一种代理以控制对这个对象的访问。

别名:Surrogate(替身)

 

在这里,被“控制访问”的对象(即_target对象)可以在运行时改变,需要控制的接口可以在运行时改变,控制的方式(即InvocationHandler的具体实现)也可以在运行时改变。所以在这个代理模式中,代理者和被代理者的关系是完全动态的,这就是“动态代理”名称的由来。

 

 

 

 

 

 

 

代理加盟