Spring MVC的控制器的运行时加载和动态映射请求/ URL

时间:2013-11-12 04:32:12

标签: java spring spring-mvc osgi

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

使用案例A

  1. 用户输入网址。
  2. 请求映射处理程序检索映射列表(例如,从数据库中),并根据此动态映射列表调用相关控制器。
  3. 这是因为我们希望能够做到以下几点:

    使用案例B

    1. 我们希望将新的Controller(可能是新的报告模块)加载到Web应用程序中,而无需重新部署或重新启动服务器。
    2. 我们会将这个新的Controller映射到一个URL并将其保存在某个地方(很可能是数据库)。
    3. 我们希望Controller在Spring应用程序上下文中注册(由Spring管理)。
    4. 我们希望在请求映射中使用这个新的控制器。
    5. 我们初步了解了实现这一目标的不同方法,但我们不确定这条路线的最佳架构/方法。几个问题:

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

2 个答案:

答案 0 :(得分:1)

用例A: 您可以将url映射保留在属性文件中,然后使用属性占位符在上下文中使用xml配置初始化bean,而不是DB。这种方式保留在弹簧框架内,您可以避免注释。

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

答案 1 :(得分:0)

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

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

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

如果选择了xml配置,那么请查看属性' autoReloadEnabled',但它不适合生产使用。

希望这有帮助!!!