0

我正在设计 Spring Web 应用程序(我使用 Spring MVC)遵循插件架构。每个插件(插件是一个 jar 文件)及其组件(控制器、服务、POJO、..)都将包含在每个 ApplicationContext 中,每当我禁用该插件(通过关闭其 ApplicationContext)时,用户将收到一条消息说“The特性或功能不可用”。当我再次刷新插件的 ApplicationContext 时,该插件将再次可用,并且用户可以访问该插件的功能。插件不相互依赖,它只依赖于核心模块。但是在 Spring 中,只有子上下文可以看到父上下文,反之亦然。由于 Spring 的这种限制,我有一些其他的想法来实现它,如下所示:

1/ 我创建了一个注解@Plugin 来标记该插件的包并使用AOP 来拦截用户访问。每当禁用插件时,用户就无法访问该插件的服务/控制器,并且将引发异常以在网页上通知用户。

2/ 不支持在运行时禁用插件。服务器需要停止,我们必须删除该 jar 文件才能从 Web 应用程序中卸载该插件

3/ 创建一个 channing ApplicationContext,它将在许多 ApplicationContext 中查找 bean 或组件,并将这个用于 DispatcherServlet。

有人可以给我一些建议吗?我应该使用以上哪个想法或不使用它们?我想开发一个 Web 应用程序,我们可以在运行时安装/卸载插件而无需重新启动服务器。

谢谢

4

1 回答 1

0

也许您应该尝试将 spring osgi 与 Gemini 一起使用?http://www.eclipse.org/gemini/blueprint/documentation/reference/1.0.2.RELEASE/html/app-deploy.html

于 2013-08-19T05:47:49.030 回答