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

爱加速小课堂:代理模式之动态代理的作用

承接上文,上次我们讲述到《动态代理的前世今生》中“动态代理”这个名字从何而来的问题,那接下来,我们继续来了解下我们的“动态代理”。

 

这是一个关于RMI的故事,也许你要说了:“好吧,我现在知道动态代理是怎么回事。可是它有什么用呢?”在2000年,刚拿到JDK 1.3的很多人都发出了同样的问题,其中就包括有“Java神童”之称的Rickard Oberg。

 

 

当时Oberg正在设计JBoss的EJB容器——准确说是EJB容器中的RMI部分。从Sun的参考实现开始,绝大多数EJB容器(包括IBM WebSphere、BEA WebLogic等业界领先的产品)都采用了预编译的做法:首先根据业务代码生成对应的RMI skeleton,然后把 skeleton和业务代码一起编译,由容器在运行时将方法调用分发给合适的skeleton去执行。

 

但是在Oberg敏锐而又挑剔的眼里,这种传统的实现方式是极度缺乏美感的,在EJB规范刚刚发布不久的2000年,EJB的应用尚属凤毛麟角,J2SE 1.3也才刚刚发布,Oberg完全凭直觉和审美就察觉了这种实现方式的缺陷。

 

在种种分析后,此时,问题集中为一个:在如何创建这样一个代理类:它的实例可以实现任意的业务接口,并且可以在运行时决定一个实例究竟实现哪个业务接口。

 

2000年9月,Rickard Oberg突然发现,原来JDK 1.3提供的这个叫动态代理的东西可以这样来用。剩下的事情就是按部就班地写程序了。最后,Oberg完成了这个优雅的EJB实现,也奠定了JBoss直到4.0版本之前没有改变的架构基础。这是全世界第一个基于动态代理机制的EJB实现,JBoss一向引以为傲的热发布能力很大程度上正是得利于这个优雅的架构。

 

 

 

 

 

 

代理加盟