常用的两种去插件之间循环依赖 方法(Extension和OSGi)

一般来说想要去除Eclipse Plugin之间的循环依赖 ,这里介绍两种方法:
第一定义一个Extension Point,简单的就是在可以定义两个属性name, class;name用来指明实现这个扩展点的名称,class就是要实现这个扩展点要实现的公共接口.然后可以在其他Plugin中实现一个Extension Point.如果要实现这个实例就可以使用
IExtensionRegistry registry  =  Platform.getExtensionRegistry();
        elements 
=  registry.getConfigurationElementsFor(extension point ID);

的到所有的实现这个扩展点的Element再利用Object service = element.createExecutableExtension("class");就可以的得到你要的实例对象.
第二种方法就是利用Plugin种的BundleContext,这样的话首先在你要被引用的Plugin 的
public   void  start(BundleContext context)  throws  Exception  {
    
super.start(context);
    
//注册一个IWarehousePluginService接口的实例.
        context.registerService(IWarehousePluginService.class.getName(),
                
new WarehousePluginService(), null);
}

在这你要使用的地方用;
public  IWarehousePluginService getWarehouseService()  {
        ServiceReference reference 
= context
                .getServiceReference(IWarehousePluginService.
class.getName());
        
return (IWarehousePluginService) context.getService(reference);
    }

你可能感兴趣的:(OSGI,讨论)