我打算开发一个完全基于模块的系统。 系统库应该支持查找插件,启动它们并能够为这些模块提供通信方式。 理想情况下,应该能够放入新模块并随意抽出未使用的模块,并且模块应该能够使用彼此的功能(如果可用)。

该系统应该用作仿真系统的基础,其中许多东西发生在不同的模块中,而其他模块可能希望基于此做某事。

我打算开发的系统将采用Java语言。 我看到它的方式,我打算为每个模块都有一个包含子文件夹的文件夹,其中包含一个XML,用于描述模块的信息,例如名称,可能会引发哪些事件,类似的东西。 我想我可能需要编写一个自定义的ClassLoader来处理这些东西。

问题是,我不知道我的想法是否真的有水,当然,我打算建立一个工作原型。 但是,我之前从未使用过真正的模块化系统,而且我不确定解决这个问题的最佳方法是什么。

我应该从哪里开始? 在开发这种系统时是否存在常见问题和陷阱? 如何在保持隔离的同时使模块相互通信(即,移除模块和使用它的另一个模块保持理智)? 是否有任何我可以阅读的指南,规范或文章可以给我一些关于从哪里开始的想法? 如果它们基于Java会更好,但这不是必需的,因为我现在正在寻找的是想法,而不是代码。

任何反馈都表示赞赏。

===============>>#1 票数:9 已采纳

你一定要看OSGi 它旨在成为Java 组件/插件机制。 它允许您模块化您的代码(在所谓的bundle中)并在运行时更新bundle。 您还可以完全隐藏实现包,使其免受其他包的不必要访问,例如。 仅提供API。

Eclipse是第一个实现和使用OSGi的主要开源项目,但他们没有充分利用它(没有重新启动就没有插件安装/更新)。 如果你从头开始,它将为你提供一个非常好的插件系统框架。

Apache Felix是一个完整的开源实现(还有其他的,比如Eclipse Equinox )。

===============>>#2 票数:1

如果没有详细介绍,您应该关注Spring ,熟悉OSGI或Eclipse RCP框架也会为您提供一些您需要记住的基本概念。

===============>>#3 票数:1

另一个选项是Java 1.6中添加的ServiceLoader

===============>>#4 票数:0

他们有很多方法可以做到,但简单的事情可以通过使用Reflection。 您在文件的XML文件名中写入(这将是一个真实的类)。 你可以检查它是什么类型,然后用反射创建它。 该类可以有一个通用接口,可以让您查找外部文件/类是否真的是您的模块之一。 以下是有关Reflexion的一些信息。

您还可以使用像这个SourceForge这样的预编码框架链接文本 ,它将为您提供创建模块/插件的第一步。

  ask by translate from so

未解决问题?本站智能推荐:

1回复

如何在模块中调用SimpleCaddy插件?

我正在使用SimpleFileLoader模块,并希望将SimpleCaddy插件放置在每个上载图像的旁边。 我知道在HTML / PHP代码中放置插件调用的位置,但不知道如何调用SimpleCaddy插件以显示“添加购物车”按钮。 里克
1回复

Joomla 3模块保存事件

我正在搜索将特定模块保存为插件后触发的事件。 类似于内容组的onContentAfterSave事件。 是否存在此类事件,或者保存后如何触发此类事件?
2回复

在好友列表更新时触发的SocialEngine挂钩

是否有任何与朋友列表相关的钩子,即当我添加/删除朋友时,钩子应该触发? 还是有关创建新钩子的任何文档,或者有什么可以帮助您的?
1回复

春季:模块/组件/插件

我想知道,java spring框架是否提供了模块或插件的概念来为不同的spring应用程序(相同的代码库)开发模块/插件。 你知道我的意思? 我想开发一个模块/插件,我可以在spring应用程序1和spring应用程序2中使用。谢谢!
1回复

与模块相比,在Play Framework 2中创建/使用插件的优点/区别是什么? [关闭]

我对Play Framework 2相对陌生,我想知道在Play Framework 2中相对于模块创建/使用插件的优势/区别是什么? 我的意思是为什么您要通过开发插件向项目中添加一些东西,为什么要通过创建模块来向项目中添加东西? 我正在把事情混在一起吗?
1回复

Maven和Java插件框架

我有一个很难解释的问题,但我会尽力做到这一点。 如果您什么都不懂或需要更多信息,请随时询问。 :) 我有一个使用Java插件框架的Java项目。 这意味着我正在项目的类路径中搜索具有特定结构的项目。 我有两个具有此所需结构的项目,这些项目作为依赖项包含在主项目pom.xml中:
1回复

将组件添加到类路径时如何使其自身注册

我想在我正在开发的Web应用程序中添加某种面向插件的功能。 这背后的主要原因是能够为每个客户构建不同种类的分发包(其中包含不同的jar文件集)。 唯一的事情是我不想更改应用程序的配置文件以告诉它可以在哪里找到其插件。 我希望该应用程序发现其插件。 我想我需要真正简单明了的东西。
1回复

在Eclipse工作区中触发保存操作时执行自定义插件操作

我已经开发了一个插件来为工作空间中的文件生成UUID。 我希望在调用保存事件时触发该操作。 我不确定如何实施? 任何帮助将是可观的。
2回复

Bukkit插件编码不起作用?

好吧,我是Java新手。 这是我有史以来第一个bukkit插件,唯一的错误是它( 单击此处 )。 该插件的目的是当您右键单击“基岩断路器”时,它将破坏基岩。
1回复

我的Java服务器上的Java支持插件

基本上,我想找出的目的是如何将插件添加到我的Java服务器中,就像Bukkit和Minecraft一样。 我在想以下方式: Server.registerEvents(Class,要监听的类),换句话说,是这样的:Server.registerEvents(this,Player.c