多模块项目中的Spring配置


问题内容

我是Spring的新手,遇到这样的情况:单个项目包含多个模块,其中包括一个Web模块。Web模块使用Spring
MVC,但是我想知道我是否可以在项目级别拥有可以处理整个项目的主要Spring配置,以便可以充分利用Spring框架的优势。

main
   -module1
   -module2
   -web
      +spring3.1, spring-security

在这种情况下最好的设置是什么?


问题答案:

构建布局和运行时CLASSPATH是两件事。即使您在不同的模块中定义了单独的applicationContext.xml文件或@Configuration类,它们
也可能 会合并为一个CLASSPATH。

话虽如此module1module2可能会声明自己的上下文,但是由于CLASSPATH是在运行时合并的,因此只会创建一个主上下文。同样,如果您选择在一个模块中使用CLASSPATH扫描,则它可能会拾取@Service在其他模块中带有注释的类(bean)。

web模块中,该模块也应该依赖于Spring核心库,也将依赖于spring-webMVC和spring- security。该模块将创建子web上下文,该子上下文可以访问主上下文,但不能访问其他上下文。

显然,您的uber-JAR(ear?)中每个库应该只有一个副本。