我打算开发一个完全基于模块的系统。系统库应该支持查找插件,启动它们并能够为这些模块提供通信方式。理想情况下,应该能够放入新模块并随意抽出未使用的模块,如果可用,模块应该能够使用彼此的功能。
这个系统应该被用作仿真系统的基础,其中许多东西发生在不同的模块中,而其他模块可能希望基于此做一些事情。
我打算开发的系统将采用Java语言。我看到它的方式,我打算为每个模块都有一个包含子文件夹的文件夹,其中包含一个XML,用于描述模块的信息,例如名称,可能会引发哪些事件,类似的东西。我想我可能需要编写一个自定义的ClassLoader来处理这些东西。
问题是,我不知道我的想法是否真的有水,当然,我打算建立一个工作原型。但是,我以前从未使用真正的模块化系统,而且我不确定解决这个问题的最佳方法是什么。
我应该从哪里开始?在开发这种系统时是否存在常见问题和陷阱?如何在保持隔离的同时使模块相互通信(即,移除模块和使用它的另一个模块保持理智)?是否有任何我可以阅读的指南,规范或文章可以给我一些关于从哪里开始的想法?如果它们基于Java会更好,但这不是必需的,因为我现在正在寻找的是想法,而不是代码。
感谢任何反馈。
答案 0 :(得分:9)
你一定要看OSGi。它旨在成为Java的 组件/插件机制。它允许您模块化您的代码(在所谓的bundle中)并在运行时更新bundle。您还可以完全隐藏实现包,使其免受其他包的不必要访问,例如。仅提供API。
Eclipse是第一个实现和使用OSGi的主要开源项目,但他们没有充分利用它(没有重新启动就没有插件安装/更新)。如果你从头开始,它将为你提供一个非常好的插件系统框架。
Apache Felix是一个完整的开源实现(还有其他一些,例如Eclipse Equinox)。
答案 1 :(得分:1)
如果不详细了解,您应该关注Spring,熟悉OSGI或Eclipse RCP框架也会为您提供一些您需要记住的基本概念。
答案 2 :(得分:1)
另一个选项是Java 1.6中添加的ServiceLoader。
答案 3 :(得分:0)