将Spring的配置拆分为多个xml文件的正确方法是什么?
目前我有
/WEB-INF/foo-servlet.xml
/WEB-INF/foo-service.xml
/WEB-INF/foo-persistence.xml
我web.xml
有以下几点:
Spring MVC Dispatcher Servlet intrafest org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/foo-*.xml 2 contextConfigLocation /WEB-INF/foo-*.xml org.springframework.web.context.ContextLoaderListener
实际问题:
这种方法是正确/最好的吗?
我真的需要同时指定中的配置位置DispatcherServlet
和该context-param
板块?
为了能够引用foo-servlet.xml
从中定义的bean,我需要记住foo-service.xml
什么?这是否与指定contextConfigLocation
有关web.xml
?
更新1:
我正在使用Spring framework 3.0.我的理解是,我不需要像这样进行资源导入:
这是正确的假设吗?
我发现以下设置最简单.
使用DispatcherServlet的默认配置文件加载机制:
在初始化DispatcherServlet时,框架将在Web应用程序的WEB-INF目录中查找名为[servlet-name] -servlet.xml的文件,并创建在那里定义的bean(覆盖用于定义的任何bean的定义)全球范围内的同名).
在您的情况下,只需intrafest-servlet.xml
在WEB-INF
目录中创建一个文件,而不需要在其中指定任何特定信息web.xml
.
在intrafest-servlet.xml
文件中,您可以使用import来组成XML配置.
请注意,Spring团队实际上更喜欢在创建(Web)ApplicationContext时加载多个配置文件.如果您仍然希望这样做,我认为您不需要同时指定上下文参数(context-param
)和 servlet初始化参数(init-param
).其中一个会做.您还可以使用逗号指定多个配置位置.
Mike Nereson在他的博客上说:
http://blog.codehangover.com/load-multiple-contexts-into-spring/
有几种方法可以做到这一点.
1. web.xml contextConfigLocation
您的第一个选择是通过ContextConfigLocation元素将它们全部加载到Web应用程序上下文中.假设您正在编写Web应用程序,那么您已经在这里拥有主要的applicationContext.您需要做的就是在下一个上下文的声明之间放置一些空格.
contextConfigLocation applicationContext1.xml applicationContext2.xml org.springframework.web.context.ContextLoaderListener 以上使用回车.或者,哟可以放入一个空间.
contextConfigLocation applicationContext1.xml applicationContext2.xml org.springframework.web.context.ContextLoaderListener 2. applicationContext.xml导入资源
您的另一个选择是将主applicationContext.xml添加到web.xml,然后在该主要上下文中使用import语句.
在
applicationContext.xml
你可能有......你应该使用哪种策略?
1.我总是喜欢通过web.xml加载.
因为,这允许我保持所有上下文彼此隔离.通过测试,我们可以只加载运行这些测试所需的上下文.这使得开发更加模块化,因为组件保持不变
loosely coupled
,以便将来我可以提取包或垂直层并将其移动到自己的模块.2.如果要将上下文加载到a中
non-web application
,我会使用该import
资源.
我们正在处理两种类型的上下文:
1:根上下文(父上下文.通常包括所有jdbc(ORM,Hibernate)初始化和其他Spring安全相关的配置)
2:单独的servlet上下文(子上下文.典型的Dispatcher Servlet上下文并初始化与spring-mvc相关的所有bean(控制器,URL映射等)).
这是web.xml的一个示例,其中包含多个应用程序上下文文件
Spring Web Application example
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
/WEB-INF/spring/jdbc/spring-jdbc.xml
/WEB-INF/spring/security/spring-security-context.xml
spring-mvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
/WEB-INF/spring/mvc/spring-mvc-servlet.xml
spring-mvc
/admin/*
@eljenso:如果应用程序使用SPRING WEB MVC,将使用intrafest-servlet.xml webapplication context xml.
否则@kosoant配置没问题.
如果您不使用SPRING WEB MVC但想要使用SPRING IOC的简单示例:
在web.xml中:
contextConfigLocation classpath:application-context.xml
然后,您的application-context.xml将包含:
这些import语句,用于加载各种应用程序上下文文件并放入主application-context.xml.
谢谢,希望这会有所帮助.