【问题标题】:Spring MVC Plugin ArchitectureSpring MVC 插件架构
【发布时间】:2011-08-04 19:34:47
【问题描述】:

我是 JavaEE 的新手,但对 ASP.NET MVC 有一定的经验。使用 ASP.NET MVC,我知道我们可以使用 ASP.NET MVC Web 应用程序制作插件架构,因此您可以制作具有 MVC 结构的 dll 并将其放入现有的 ASP.NET MVC Web 应用程序中,使其无需编译 Web 即可工作应用程序。 http://www.wynia.org/wordpress/2008/12/05/aspnet-mvc-plugins/

我想知道 Spring MVC 是否可以实现这种架构。例如,当我创建一个具有 MVC 结构的 jar(或 war)文件并将其放入现有的 Spring MVC Web 应用程序中时,它应该可以在不重新编译 Web 应用程序的情况下工作。如果这是可能的,我该如何实现?任何参考将不胜感激。

【问题讨论】:

    标签: java asp.net-mvc spring plugins spring-mvc


    【解决方案1】:

    不重新编译是可能的,但可能不重新启动。您可以创建一个 .jar,将其放入 WEB-INF/lib 目录。通过使用classpath scanning,您应该能够在启动时部署您的新控制器。您可以完全跳过视图,直接将数据输出到 ServletResponse。我不知道从 jar 中渲染视图可能会也可能不会。

    【讨论】:

    • 听起来不错。重启部分正常。我相信在 ASP.NET MVC 中也是如此。谢谢朋友。
    【解决方案2】:

    听起来你想搜索“hotdeploy”。

    您要求的不是 Spring 的特性,而是 JVM 和应用程序服务器的特性。应用程序服务器能够看到您的类确实发生了变化,并使用一些巧妙的 ClassLoader 技巧,它可以在新版本可用时将它们加载到正在运行的 JVM。 Java 实际上并不是为这样工作而设计的,因此存在一些问题(ClassLoader、内存泄漏、hotdeploy 是查找有关潜在问题和可能解决方案的更多信息的好关键字)。我不建议将其用于生产用途,但在开发过程中会很方便。

    由于这是应用服务器的一项功能,实际细节取决于特定的应用服务器,并在其文档中进行了说明。

    如果您只是想要一些插件魔术,而不是实际的热部署,那么您可以做其他事情。自定义 ClassLoader 可以从您想要的任何源(文件、网络、数据库..)加载类,然后您可以实例化并通过反射使用这些类。 (当您将战争部署到 Tomcat/JBoss 或其他什么时会发生这种情况)。在 jar/war 文件中访问和动态重新加载非类资源要容易得多。

    【讨论】:

      猜你喜欢
      • 2018-08-30
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      • 2015-06-23
      • 1970-01-01
      • 1970-01-01
      • 2011-05-24
      • 2012-04-28
      相关资源
      最近更新 更多