我应该如何在分层JavaEE应用程序中设计插件系统?

我应该如何在分层JavaEE应用程序中设计插件系统?,java,jakarta-ee,inheritance,design-patterns,plugin-architecture,Java,Jakarta Ee,Inheritance,Design Patterns,Plugin Architecture,我有一个基于JavaEE的RESTAPI应用程序。它具有如下所示的分层体系结构: 资源(Jax-rs资源) 对象验证 对象映射器 服务层 存储库层 JPA实体 一切都使用Spring依赖项注入进行连接 我需要以这样一种方式设计这个核心应用程序,它允许其他外部开发人员编写扩展/插件,覆盖或扩展核心中的任何次要或主要功能。如果有帮助的话,可以把它想象成JavaEE中的WordPressCMS。您将如何围绕当前架构设计插件系统 我可以想到的一个明显的方法是覆盖或向适当的资源(带有验证、object

我有一个基于JavaEE的RESTAPI应用程序。它具有如下所示的分层体系结构:

  • 资源(Jax-rs资源)
    • 对象验证
    • 对象映射器
  • 服务层
  • 存储库层
  • JPA实体
  • 一切都使用Spring依赖项注入进行连接

    我需要以这样一种方式设计这个核心应用程序,它允许其他外部开发人员编写扩展/插件,覆盖或扩展核心中的任何次要或主要功能。如果有帮助的话,可以把它想象成JavaEE中的WordPressCMS。您将如何围绕当前架构设计插件系统

    我可以想到的一个明显的方法是覆盖或向适当的资源(带有验证、objectmapper)、服务、存储库和实体添加新功能,并从中创建一个jar+xml。但我想确保插件开发人员在重用大量核心代码的同时,必须编写绝对最少的代码才能使新功能正常工作

    假设,您想要创建一个wordpress博客文章扩展,该扩展允许您创建博客文章,其中包含核心中尚不存在的几个额外字段。设计当前JavaEE应用程序的最简单、最干净的方法是什么,这样插件/扩展开发人员就可以轻松地使用它?有没有像策略或模板方法模式这样有用的模式


    是否有使用Spring/JPA和标准技术的开源Java CMS遵循该模型?

    我认为您的意思是扩展功能,而不是覆盖核心。典型的架构(architecture)示例定义了可以覆盖的关注点(与核心分离)并作出规定。Eclipse框架使用插件扩展和扩展点机制的组合来实现这一点。使用OSGI绑定可以进一步实现这一点


    另一种方法是将应用程序分解为更小的独立模块/服务。您所需要做的就是在ESB/应用程序集成器(如Mule/Spring集成)上托管这些模块,并允许用户配置他们的路由/转换版本。扩展意味着创建新的转换器,将其添加到消息流中

    朋友,听起来你在试图重新创造。