10

我有一个使用 Spring IoC 的多模块 Maven 项目,例如

parent-proj
  - module1
  - module2
  - module3
  - web-module

我的问题是:

组装 applicationContext 文件的最佳实践是什么?我应该在 web 模块中创建一个巨大的 applicationContext-web.xml 吗?或者我应该在每个子模块中创建 applicationContext-module<#>.xml,并将它们全部导入我的 applicationContext-web.xml?

我一直在使用第二个选项。现在看起来事情有点失控(例如,bean 覆盖具有相同 id 的 bean 等)。

谢谢。

4

2 回答 2

10

首先,如果module1、module2和module3是web-module中引用和使用的纯java库(例如,包含Domain Model、DAO、Service类等),我们通常不会在这个纯java库中操作Spring容器.

其次,您不应该按项目模块拆分 Spring 容器。根据需求,您可以通过应用层溢出 Spring 容器,并在 web 模块项目中定义多个 applicationContext 文件(以避免单个巨大的 applicationContext.xml)。例如,我们通常会这样做:

web-module/src/main/webapp/WEB-INF:
  applicationContext-dataAccess.xml
  applicationContext-dataStore.xml
  applicationContext-security.xml
  applicationContext-web.xml
  ... ...
  web.xml

希望这是有道理的。

于 2012-10-17T01:40:41.440 回答
5

我也更喜欢第二种方法,但使用 Springclasspath*:伪 url。就像是:

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

这将在我的模块 META-INF 文件夹中加载任何模块 xml bean 定义。

现在看起来事情有点失控(例如,bean 覆盖具有相同 id 的 bean 等)。

这只是组织项目的问题。我总是尝试使用@AutowiredSpring 可以根据我声明的接口解决依赖关系。当然,我从不扫描我的模块之外的包来逃避 Id 上的这类问题。

如果无法自动装配,则仅通过 xml 声明 bean 并将它们的 id 放在那里。

基本思想(不是针对 spring,而是针对模块化项目)在这里得到了很好的解释。

于 2012-10-16T19:20:20.017 回答