加载spring config xmls的最佳方式是什么?
我必须在名为myproj-controllers.xml,myproj-services.xml和myproj-dao.xml的myproj spring mvc应用程序中加载3个spring config xml文件。我有两个选项来加载它们。加载spring config xmls的最佳方式是什么?
首先使用上下文PARAM这样
<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中使用进口资源
<import resource="myproj-controllers.xml"/>
<import resource="myproj-services.xml"/>
<import resource="myproj-dao.xml"/>
或其次在web.xml
推荐哪种方法?为什么?在我看来,我发现导入方法更简单,因为我们只需要更改myproj-servlet.xml而不是web.xml。
Spring允许你在一个父子关系声明多重背景,所以我总是去了一个根applicationContext.xml
包含我的应用程序豆(服务的DAO等)和一个用于action-servlet.xml
Servlet上下文中(请求映射,视图解析器等)。
我曾经需要action-servlet-2.xml
文件,但两个servlet上下文仍然只有一个根applicationContext.xml
。
所以对我来说,它始终是父上下文+子上下文。
将文件拆分成更多块只是为了减小XML的大小(这正是<import>
的最佳做法)。
对我来说,contextConfigLocation
参数是指应用程序上下文文件一起加载到一个应用程序上下文实例中。但是您的文件(myproj-controllers.xml
,myproj-services.xml
,myproj-dao.xml
)看起来像是部分的一个应用程序上下文文件。
由于这个原因,我会亲自去<import>
语句,并在contextConfigLocation
参数中只有一个值(对于根应用程序上下文)。
我更喜欢上下文加载器侦听器的方法,但也许这是因为我从来没有考虑过导入方法。我会尝试一下。谢谢。
我没有看到任何性能优势。两种情况下都需要重新部署WAR文件。它正在修改一个文件而不是另一个文件。我没有看到任何区别。它有一个自行车棚感觉给我,但我可能是错的。
嗨,我没有意识到父上下文+子上下文,如果它在春天的文档中提到我可能完全忽略它。你可以给我一个链接进一步阅读?谢谢。 – tintin
@ user354161:这是在Spring参考中提到的,但不幸的是它是分散的信息,而不是在一个地方强调。不过,javadoc的[ApplicationContext](http://static.springsource.org/spring/docs/2.5.5/api/org/springframework/context/ApplicationContext.html)提到了:_父类上下文的继承。后代中的定义总是优先考虑。例如,这意味着整个Web应用程序可以使用单个父上下文,而每个Servlet都有自己的子上下文,而该子上下文独立于任何其他Servlet。 – 2011-09-10 19:31:54