我必须在名为myproj-controllers.xml,myproj-services.xml和myproj-dao.xml的myproj spring mvc app中加载3个spring config xml文件。我有两种方法可以加载它们。
首先在myproj-servlet.xml中使用导入资源
<import resource="myproj-controllers.xml"/>
<import resource="myproj-services.xml"/>
<import resource="myproj-dao.xml"/>
或其次在web.xml中使用像
这样的上下文参数<context-param>
<param-name>contextConfigLocation</param-name>
<param-values>/WEB-INF/myproj-controllers.xml</param-values>
<param-values>/WEB-INF/myproj-services.xml</param-values>
<param-values>/WEB-INF/myproj-dao.xml</param-values>
</context-param>
并添加ContextLoader侦听器
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
推荐哪种方法?为什么?在我看来,我发现导入方法更容易,因为我们只需要更改myproj-servlet.xml而不是web.xml。
答案 0 :(得分:1)
Spring允许你在父子关系中声明多个上下文,所以我总是选择一个包含我的应用程序bean(服务,DAO等)的根applicationContext.xml
和一个用于servlet上下文的action-servlet.xml
(请求映射) ,查看解析器等)。
我曾经需要action-servlet-2.xml
文件,但对于两个servlet上下文仍然只有一个根applicationContext.xml
。
所以(对我来说)它始终是父上下文+子上下文。
将文件拆分成更多部分的唯一需要就是减少XML的大小(这是<import>
最擅长的)。
对我来说,contextConfigLocation
param指的是将应用程序上下文文件一起加载到单个应用程序上下文实例中。但您的文件(myproj-controllers.xml
,myproj-services.xml
,myproj-dao.xml
)似乎是一个应用程序上下文文件的一部分。
出于这个原因,我个人会去<import>
语句,并在contextConfigLocation
param中只有一个值(对于根应用程序上下文)。
答案 1 :(得分:0)
我更喜欢上下文加载器侦听器方法,但也许这是因为我从未考虑过导入方法。我会尝试一下。感谢。
我认为没有任何性能优势。在任何一种情况下都必须重新部署WAR文件。它正在修改一个文件而不是另一个文件。我没有看到任何区别。它有一个自行车棚的感觉,但我可能是错的。