说实际例子吧。
现在有一个框架Bundle A,一个业务的 Bundel B。
Bundle A中使用了一个第三发组件,我们假设有一个类为Manager。
Manager有一个接口注册函数。
Manager.registerFunction (String alias, String functionName); // functionName包含函数的完整路径 package.class.function
这个第三方组件自然是被Bundle A的class loader加载了。
现在Bundle B 有一个方法要注册。假设为
class Demo
{
public static function ();
}
此时Bundle B初始化时使用
Manager.instance.registerFunction ( "function ", "packageB.Demo.function ");注册函数。
但是由于Demo类是Bundle B 的class loader加载的。所以注册后在第三方软件使用倒function时去反射,就是找不到Demo这个类。
同时又不可能在框架的MAINFEST.MF文件中增加import 业务的Bundle。
------解决方案--------------------
第三方组件是否是bundle的形式,如果是bundle,就不是由Bundle A的class loader加载的。
如果是一个inside的jar,必须export才能被Bundle A之外的bundle使用。
可以将Manager发布为一个service,可以在Bundle B的上下文context中获得Manager,然后将业务类注入。