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

爱加速小课堂:代理模式之动态代理AOP的实现

发布时间:

随着以上的问题,一位年轻人开始思索:如何不使用代码生成技术实现AOP。他就是Jon Tirsen,Rickard Oberg离开JBoss之后的挚友之一。

 

Oberg完成了用动态代理技术如此优雅地解决了EJB容器中RMI的问题,却并没有太多的人了解这一成就。好在Tirsen同样思维敏锐,他与Oberg的交流很快碰出了火花:只要将Oberg在JBoss里做的事抽象泛化,那就是一个基于动态代理的AOP实现。

 

 

他采用了“拦截器链”(Interceptor Chain)的体系结构,并完成了这个产品,这就是Nanning框架。2002年11月,Nanning发布了第一个版本。随后,由Jon Tirsen和Rickard Oberg牵头,一群AOP技术的先行者又成立了“AOP联盟”(AOP alliance)组织,制订了Java AOP的标准API。如今所有基于动态代理的开源AOP框架都实现了这套标准,说明Jon Tirsen选择的架构思路已经得到了同行的一致认可。

 

但这时的成果还不足以让Tirsen和Oberg满意,因为它的易用性还不够好。

 

在2002年以前,几乎每个J2EE应用中都有大量的工厂,如果要为这些应用引入AOP,势必要大范围修改工厂:即便是在新应用中引入AOP,也需要对工厂的实现方式做很多调整,从而丧失了AOP理想中的“透明性”——即:所有业务代码都不知晓AOP的存在。

 

ThoughtWorks公司(也就是Martin Fowler的公司)的Paul Hammant和Aslak Hellesoy等几位员工在业余时间创建了一个开源项目,叫做PicoContainer——极其徽小的容器。这个容器正是无数人梦寐以求的完全透明、完全无侵入的基础设施服务。动态代理的技术、AOP的思想,再加上支持依赖注入的容器,这个“黄金三角”为我们提供了时下最优秀最流行的J2EE基础架构!

 

虽然动态AOP并非都是以动态代理技术实现,但其他实现技术(例如CGLIB)在原理上与动态代理都是一脉相通,所以完全可以说,正是动态代理技术的出现和发展,让整个J2EE世界的架构理念发生了根本性的变化,而Spring框架则是推动这场变革的一阵春风。

 

文章关于动态代理的故事到2004年底就停止了,但故事并没有结束,一大批的学者们致力于相关领域的研究,AOP、乃至整个J2EE社群的技术潮流未来发展如何?这又是一轮新的故事。(本文节选自《动态代理的前世今生》,侵删致歉。)