我对Spring框架有点熟悉,但从项目架构的角度来看,我仍然有很多关于使用spring的问题。现在我正在设置Spring 3和Maven Web应用程序,我愿意尝试所有花哨的组件扫描和自动装配功能,但这是我感到困惑的地方。
我试图将项目分解为子模块。在某些时候,这些子模块可能在something-context.xml
中包含classpath*:resource/META-INF
,例如,当我想在单独的模块中定义与datSource相关的东西时。所以,这是一个很好的春天让你从所有罐子的类路径中加载上下文文件。
但是这里变得含糊不清 - 比如我正在使用组件扫描。我显然使用spring DispatcherServlet
并且需要加载servlet上下文,然后在web.xml contextConfigLocation
中指定了一个全局应用程序上下文参数。
所以现在servlet上下文配置为com.mycom.project.controllers
启用了组件扫描功能,并且在全局contextConfigLocation
中加载的上下文具有加载了包com.mycom.project
的组件扫描功能的上下文也搜索classpath*:META-INF/spring/*-context.xml
。
所以我的问题是 - 假设组件扫描用于for com.mycom.project.controllers
和com.mycom.project
,这个加载控制器是否两次?或者它是否全部加载到一个巨大的容器中,contextConfigLocation
或全局声明的DispatcherServlet
参数是一种访问问题?因为DispatcherServlet
只能达到servlet-context.xml
中定义的内容,但无法使用其他任何内容?
如果我的假设错了,我是否可以就如何管理多模块项目问题提出建议?
感谢。
答案 0 :(得分:2)
是的,你可能会遇到麻烦。请参阅此链接以了解如何解决问题。
@Service are constructed twice
创建模块时的进展方式似乎对我有用。每个模块都有一个context.xml文件,加载应用程序后将加载所有模块。您的模块是独立的,也可以在不同的环境中使用。这就是我也这样做的方式。