【仅供内部供应商使用,不提供对外解答和培训】

Page tree

Versions Compared

Key

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

...

PluginContext是插件模块的核心,每个插件都对应一个PluginContext对象,在插件内部可以用PluginContexts.currentContext()方法获取。

获取当前插件上下文

 

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

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

获取指定插件上下文

 

Code Block
//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());

 

PluginContexts.currentContext()方法就是使用的PluginManager.getContext(ClassLoader)来完成自动获取当前上下文操作的。首先从调用栈中找到调用者的Class对象,根据这个Class获取上下文。

上下文对象结构

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

PluginThreadFactory:定义了生成Executor、Timer、Socket等的入口,用上下文生成的这些对象无需手动释放资源

...