Spring 3应用程序上下文加载

时间:2013-01-03 09:50:13

标签: java spring applicationcontext

我对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.controllerscom.mycom.project,这个加载控制器是否两次?或者它是否全部加载到一个巨大的容器中,contextConfigLocation或全局声明的DispatcherServlet参数是一种访问问题?因为DispatcherServlet只能达到servlet-context.xml中定义的内容,但无法使用其他任何内容?

如果我的假设错了,我是否可以就如何管理多模块项目问题提出建议?

感谢。

1 个答案:

答案 0 :(得分:2)

是的,你可能会遇到麻烦。请参阅此链接以了解如何解决问题。

@Service are constructed twice

创建模块时的进展方式似乎对我有用。每个模块都有一个context.xml文件,加载应用程序后将加载所有模块。您的模块是独立的,也可以在不同的环境中使用。这就是我也这样做的方式。