我是Spring的新手,并且遇到了包含一个Web模块的多个模块的单个项目。 Web模块使用Spring MVC,但我想知道我是否可以在项目级别拥有主要的Spring配置来处理整个项目,这样我就可以充分利用Spring框架。
main
-module1
-module2
-web
+spring3.1, spring-security
这种情况的最佳设置是什么?
答案 0 :(得分:8)
我工作的这种架构。我们决定在Web模块中使用ContextLoaderListener(Spring Event Listener)。
然后,在serverApplicationContext.xml中,我们导入所有模块上下文文件:
<import resource="classpath*:module1ApplicationContext.xml" />
<import resource="classpath*:module2ApplicationContext.xml" />
...
因此,您可以在Web应用程序上下文初始化期间利用spring上下文加载。
答案 1 :(得分:6)
构建布局和运行时CLASSPATH是两回事。即使您在不同的模块中定义了单独的applicationContext.xml
文件或@Configuration
类,它们可能也会合并到一个CLASSPATH中。
据说module1
和module2
可能会声明自己的上下文,但由于CLASSPATH在运行时合并,因此只会创建一个主上下文。此外,如果您选择在一个模块中使用CLASSPATH扫描,它可能会在其他模块中提取用@Service
注释的类(bean)。
在web
模块中,它也应该依赖于Spring核心库,也将依赖于spring-web
,MVC和spring-security
。该模块将创建子web
上下文,该上下文可以访问主要上下文,但不能反过来。
显然你的uber-JAR中只有一个库的副本(ear
?)