使用 Spring 和 Maven 的模块化 Web 应用程序

Posted

技术标签:

【中文标题】使用 Spring 和 Maven 的模块化 Web 应用程序【英文标题】:Modular web application with Spring and Maven 【发布时间】:2013-02-03 11:32:15 【问题描述】:

我正在尝试用 Java 设计一个中型 Web 应用程序的架构,我想就如何做得到一些建议。

该项目由一个基础网站和一些模块组成。例如,一个模块提供用户注册,另一个模块提供网络服务,等等......

每当我需要将应用程序交付给新客户时,理想的做法是挑选他想要的模块,做一些主题(css、图像,也许是 jsp)并开发他可能需要的自定义模块(如果有的话) .

我查看了 maven 多模块项目,war overlays,但我发现很难对应用程序进行分区,尤其是在模块配置方面(例如,从模块中合并全局 spring 配置)。有人可以指出这样一个系统的例子吗?提前致谢!

【问题讨论】:

【参考方案1】:

合并弹簧配置很容易。在每个模块中,在其 /WEB-INF/classes 目录中打包一个 spring 上下文文件。当你覆盖时,依赖中的WEB-INF类中的所有类和资源都会被放到你的应用程序的WEB-INF/classes中。 (ps,如果你打包为 .jar 也可以,但如果你这样做,你将无法覆盖 .jsp 文件)

那么只需导入它们即可。这最好通过使用设置模式来查找文件来完成。这是一个例子:

<import resource="classpath*:/module/*-context.xml" />

这将导入与此模式匹配的所有类路径资源。

基于注释的示例:

@Configuration
@ImportResource(value="classpath*:/module/*-context.xml")
public class MyConfiguration  ... 

如果您需要在模块中进行任何 web.xml 自定义,那么 web.xml 配置会给您带来更多麻烦。您当然可以为此使用 servlet 3.0,但它需要正确的服务器进行部署。

【讨论】:

感谢您的帮助!我认为这里的重点是在可能的情况下跨模块“分段”配置文件。我想我可以只使用一个 web.xml。所以我现在要试一试,看看其他技术配置(休眠、磁贴等)可以做什么。我会更新这个。 hibernate 也可以让他们的模型碎片化。用于休眠会话工厂的 spring 工厂 bean 也具有类路径扫描(.hbm.xml 或基于包的扫描)【参考方案2】:

fwiw,经过一些简单的 Spring 导入经验后,我们为 Spring 开发了用于 osgi-less 模块化的小型框架。导入的第一个问题是 bean 名称冲突,您不能在两个上下文中使用同名单例,以及许多其他麻烦.. tbc https://github.com/griddynamics/banshun

-- 迈克

【讨论】:

以上是关于使用 Spring 和 Maven 的模块化 Web 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring 在多模块 Maven 项目中进行集成测试

无法使用 Maven 编译多模块 Spring 项目

Spring使用ComponentScan扫描Maven多模块工程的其它模块

Maven模块化开发,spring无法注入其它模块中的接口

spring-boot-configuration-processor 不适用于 maven 子模块项目

如何使用 Spring Boot 测试 Maven 模块项目