Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

PluginContext是插件模块的核心,每个插件都对应一个PluginContext对象PluginContext是插件模块的核心,每个插件都对应一个PluginContext对象,可以用来读取插件资源、访问plugin.xml、读取授权信息等。

获取上下文对象

在插件内部可以用PluginContexts.currentContext()方法获取

Code Block
languagejava
title插件内获取当前上下文对象
//插件内可直接使用PluginContexts的方法获取当前上下文
PluginContext contexts = PluginContexts.currentContext();

在插件外面则可以用PluginManager.getContext()等相关方法获取指定的插件上下文

Code Block
languagejava
title获取指定插件上下文
//1.获取所有(包括运行、未运行、禁用的插件)
List<PluginContext> pluginContexts = PluginManager.getContexts();
//2.获取所有包含extra-core注入的插件上下文
List<PluginContext> contexts = PluginManager.getContexts(new PluginFilter() {
    
    @Override
    public boolean accept(PluginContext context) {
	
        return context.contain(PluginModule.ExtraCore);
    }
});
//3.根据ClassLoader获取插件上下文(每个插件都有一个独立的ClassLoader)
PluginContext context = PluginManager.getContext(clazz.getClassLoader());

...

上下文对象结构

插件上下文的继承结构如图所示

  1. PluginThreadFactory:定义了生成Executor、Timer、Socket等的入口,用上下文生成的这些对象无需手动释放资源
  2. HotDeoloyToolKit:热部署工具包,当前除PluginThreadFactory之外,还定义了执行可恢复任务的入口,详见插件上下文对象HotDeoloyToolKit:热部署工具包,当前除PluginThreadFactory之外,还定义了执行可恢复任务的入口
  3. PluginResourceLoader:定义资源读取接口,上下文的资源读取范围为当前插件及报表
  4. PluginResourcePool:更宽泛的资源池,除了可以读取资源文件外,还提供了classForName方法
  5. PluginInformationProvider:提供插件静态信息,包括授权、xml配置、注入类型检查等
  6. Licensed:授权信息
  7. InjectionChecker:检查是否包含某个模块或某种类型的注入,多用于帮助实现PluginFilter
  8. PluginView:插件视图对象,包括xml中描述的id、name、vendor等信息
  9. PluginContext:除实现上述接口之外,还提供了状态检查、获取完整xml、获取注入对象等功能

...