【问题标题】:Runtime loading of Controllers for Spring MVC and dynamically mapping requests/URLsSpring MVC 的控制器运行时加载和动态映射请求/URL
【发布时间】:2013-11-24 02:44:19
【问题描述】:

我们正在使用 Spring MVC 开始一个新项目,我们希望摆脱注解驱动的请求/url 映射。我们希望实现以下用例:

用例 A

  1. 用户输入一个 URL。
  2. 请求映射处理程序检索映射列表(例如从数据库中),并根据此动态映射列表调用相关控制器。

这是因为我们也希望能够做到以下几点:

用例 B

  1. 我们希望将新的 Controller(可能是新的报告模块)加载到 Web 应用程序中,而无需重新部署或重新启动服务器。
  2. 我们会将这个新控制器映射到一个 URL 并将其保存在某个地方(很可能是 DB)。
  3. 我们希望在 Spring 应用上下文中注册 Controller(由 Spring 管理)。
  4. 然后我们想在请求映射中使用这个新的控制器。

我们已经初步了解了实现这一点的不同方式,但我们不确定实现这条路线的最佳架构/方法。几个问题:

  1. 对于用例 A,我们如何在 Spring MVC 框架中实现它(或者如果可能的话)?
  2. 对于用例 B,是否有一个好的框架或方法可以为 Web 应用程序动态加载和注册它?我们对 OSGI 进行了粗略的了解,但似乎建议在非 Web 应用程序中使用它。

【问题讨论】:

  • Imo,你应该重新考虑你的设计。 DispatcherServlet 类不用于刷新/重新加载处理程序。即便如此,如果您的映射存在冲突,应用程序也会崩溃,并且无论如何您都必须重新启动。

标签: java spring spring-mvc osgi


【解决方案1】:

使用 spring-mvc-router API 完全可以实现。

请查看以下链接 url-action mapping & routing in Spring MVC 3.0

这里的 URL 可以使用 .conf 文件配置为 controller.method,但这可以通过 java 配置来实现,目前我还没有尝试过。

此外,如果选择了 xml 配置,则检查属性“autoReloadEnabled”,但不建议用于生产。

希望对你有帮助!!!

【讨论】:

    【解决方案2】:

    对于用例 A: 您可以将 url 映射保留在属性文件中,而不是 DB,然后使用属性占位符在上下文中使用 xml 配置来初始化 bean。这样留在spring框架内,就可以避免注解。

    对于用例 B: Tomcat 支持类的动态重新加载,但只支持类文件中的非结构更改。但这存在内存泄漏,并且它不会清理类加载器的旧实例,而是创建一个新实例。

    【讨论】:

      猜你喜欢
      • 2012-05-30
      • 1970-01-01
      • 1970-01-01
      • 2020-01-16
      • 1970-01-01
      • 2020-01-22
      • 1970-01-01
      • 1970-01-01
      • 2014-03-13
      相关资源
      最近更新 更多