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

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

 2010-03-01 00:00:00 来源:WEB开发网   
核心提示: 适配器类加载器 有时候我们转换的代码有外部化的类加载策略,这意味着框架的类和方法接收明确的ClassLoader 参数,类加载器特技:OSGi代码生成(2),允许我们来决定他们从哪里加载应用代码,在这种情况下,增强类实现了一些应用可见的接口或者继承自一个应用可见的类,有时,把系统转换到OSGi就

适配器类加载器

有时候我们转换的代码有外部化的类加载策略。这意味着框架的类和方法接收明确的ClassLoader 参数,允许我们来决定他们从哪里加载应用代码。在这种情况下,把系统转换到OSGi就仅仅是让Bundle对象适配ClassLoader API的问题。这是一个经典的适配器模式的应用。

public class BundleClassLoader extends ClassLoader { 
 private final Bundle delegate; 
 
 public BundleClassLoader(Bundle delegate) { 
  this.delegate = delegate; 
 } 
 
 @Override 
 public Class<?> loadClass(String name) throws ClassNotFoundException { 
  return delegate.loadClass(name); 
 } 
} 

现在我们可以把这个适配器传给转换的框架代码。随着新bundle的增减,我们还可以增加bundle跟踪代码来创建新的适配器 —— 例如,我们可以“在外部”把一个Java框架适配到OSGi,避免浏览该框架的代码库以及变换每个单独的类加载场所。下面是将一个框架转换到使用OSGi 类加载的示意性的例子:

... 
Bundle app = ... 
BundleClassLoader appLoader = new BundleClassLoader(app); 
 
DeviceSimulationFramework simfw = ... 
simfw.simulate("com.acme.devices.SinisterEngine", appLoader); 
... 

桥接类加载器

许多有趣的Java框架的客户端代码在运行时做了很多花哨的类处理工作。其目的通常是在应用的类空间中构造本不存在的类。让我们把这些生成的类称作增强(enhancement)。通常,增强类实现了一些应用可见的接口或者继承自一个应用可见的类。有时,一些附加的接口及其实现也可以被混入。

上一页  1 2 3 4 5 6 7  下一页

Tags:加载 特技 OSGi

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