1. 概述
2. 插件式开发架构要领
2.1 插件运行主体
2.2 插件的注入、配置和初始化
2.2.1 插件配置信息
插件名称
插件版本号
插件描述信息
依赖的其他插件清单
2.2.2 插件的注入及初始化
2.2.2.1 插件定义示例
通过C#语言的Attribute特性对插件进行描述
通过实现Init, StartAsync, StopAsync标准接口初始化、启动或关闭插件。这是对插件生命周期的管理。
[Plugin(Alias = "PluginA", Description = "测试插件")]
public class Plugin :: PluginBase, ISupportInitPlugin
{
public void Init(IPluginInitContext context)
{
//自定义初始化行为
}
public override Task StartAsync(IPluginContext context)
{
//自定义启动行为
return base.StartAsync(context);
}
public override Task StopAsync(IPluginContext context)
{
//自定义关闭行为
return base.StopAsync(context);
}
}
2.3. 插件通信机制
2.3.1 基于虚拟服务总线形式的通信机制
2.3.2 插件间消息通信
3. C++语言下的插件开发案例
4. JAVA体系下的插件开发案例
4.1 OSGI简介
4.2 OSGI整体架构
4.2.1 模块层
bundle 以 jar 包形式存在的模块化物理单元,包含了代码,资源文件和元数据(模块描述信息)。
bundle 是开发、部署 OSGi 应用的基本单元。
bundle 的核心是 META-NF 目录下的 MANIFEST.MF 文件。
bundle 定义了内部包的对外可见性。
每个 bundle 都有单独的类加载器。
4.2.2 生命周期层
4.3.3 服务层
4.3 Eclipse插件示例
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: PluginDemo
Bundle-SymbolicName: PluginDemo
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: plugindemo.Activator
Bundle-RequiredExecutionEnvironment: JavaSE-16
Automatic-Module-Name: PluginDemo
Import-Package: org.osgi.framework;version="1.3.0"
Bundle-ActivationPolicy: lazy
package plugindemo;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class Activator implements BundleActivator {
@Override
public void start(BundleContext context) throws Exception {
System.out.println("Hello World!!");
}
@Override
public void stop(BundleContext context) throws Exception {
System.out.println("Goodbye World!!");
}
}
WARNING: Using incubator modules: jdk.incubator.vector, jdk.incubator.foreign
Hello World!!
osgi> 22:48:00.337 [Worker-0: Loading available Gradle versions] INFO org.eclipse.buildship.core.internal.util.gradle.PublishedGradleVersions - Gradle version information cache is up-to-date. Trying to read.
!SESSION 2021-08-31 22:47:57.492 -----------------------------------------------
5. 总结
文章转载自一个程序员的修炼之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。