WEB开发网
开发学院软件开发Java 类加载器特技:OSGi代码生成 阅读

类加载器特技:OSGi代码生成

 2010-03-01 00:00:00 来源:WEB开发网   
核心提示: Enhancer仅仅针对桥接模式,代码生成逻辑被具体化到一个可插拔的Generator中,类加载器特技:OSGi代码生成(10),该Generator接收一个上下文类加载器,从中可以得到类,Spring Dynamic Modules则用桥接类加载器来使他们的AOP包装器和服务代理得以工作,当我

Enhancer仅仅针对桥接模式。代码生成逻辑被具体化到一个可插拔的Generator中。该Generator接收一个上下文类加载器,从中可以得到类,使用反射来驱动代码生成。增强类名称的文本协议也可以通过Name接口插拔。这里是一个最终的示意性代码,展示这么一个增强类框架是如何使用的:

... 
/* Setup the Enhancer on top of the framework class space */ 
ClassLoader privateSpace = getClass().getClassLoader(); 
Namer namer = ...; 
Generator generator = ...; 
Enhancer enhancer = new Enhancer(privateSpace, namer, generator); 
... 
 
/* Enhance some class the app sees */ 
Bundle app = ... 
Class target = app.loadClass("com.acme.devices.SinisterEngine"); 
Class<SinisterDevice> enhanced = enhancer.enhance(target); 
...

这里展示的Enhance框架不仅是伪代码。实际上,在撰写这篇文章期间,这个框架被真正构建出来并用两个在同一OSGi容器中同时运行的样例代码生成器进行了测试。结果是类加载正常,现在代码在Google Code上,所有人都可以拿下来研究。

对于类生成过程本身感兴趣的人可以研究这两个基于ASM的生成器样例。那些在service dynamics上阅读文章的人也许注意到proxy generator使用ServiceHolder代码作为一个私有实现。

结论

这里展现的类加载特技在许多OSGi之外的基础框架中使用。例如桥接类加载器被用在Guice,Peaberry中,Spring Dynamic Modules则用桥接类加载器来使他们的AOP包装器和服务代理得以工作。当我们听说Spring的伙计们在将Tomcat适配到OSGi方面做了大量工作时,我们可以推断他们还得做类加载位置转换或者更大量的重构来外化Tomcat的servlet加载。

上一页  5 6 7 8 9 10 

Tags:加载 特技 OSGi

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接