Spring MVC上下文父子容器
2015-09-16 16:15
441 查看
在Spring MVC的启动依赖Spring框架,有时候我们在启动Spring MVC环境的时候,如果配置不当的话会造成一些不可预知的结果。下面主要介绍一下Spring MVC环境启动的时候context的状态。
通常情况下使用Spring MVC需要进行如下配置:
1、web.xml中增加监听和dispatcherServlet入口
2、监听器入口自动扫描配置(applicationContext.xml)
3、DispatcherServlet配置(dispatcher-servlet.xml)
上面配置是指定了DispatcherServlet所创建的上下文只扫描控制层的beans,当然在dispatcher-servlet.xml中还可以指定视图解析、JSON转换、上传下载等配置信息。
在上面的配置中,listener会创建Spring MVC环境的父类上下文。父类上下文创建完成之后,当初始化DispatcherServlet的时候,就会将之前初始化的context设置为parent。
如果将listener启动的上下文和Dispatcher中启动的上下文所扫描的包都是全部包的话,就会造成在子类context和父类context都有全部的自定义beans,如下图所示
在容器启动后获取bean的时候,也是先从子类容器中去获取bean,子类获取不到时,再到父类容器中去寻找。当子类容器中装载了Service和DAO时,控制层就会使用子类容器所装载的bean去执行。但是这里面的service是没有事务等功能的(没有Spring框架的配置),只是普通的bean,因此使用起来会有不可预知的问题。
通常情况下使用Spring MVC需要进行如下配置:
1、web.xml中增加监听和dispatcherServlet入口
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:config/dispatcher-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>如上配置所示:监听器是装载Spring框架本身的bean上下文(如Service和DAO层等);dispatcherServlet是装载Controller的上下文。
2、监听器入口自动扫描配置(applicationContext.xml)
<aop:aspectj-autoproxy proxy-target-class="true" /> <context:component-scan base-package="com.moguhu"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> <import resource="classpath*:beans-*.xml" /> <import resource="classpath*:config/beans-*.xml" />上述的配置指定了Spring框架所扫描的注解不包括@Controller(也可以直接通过包名来指定),当然其他的配置文件(如:事务配置、AOP配置、定时任务等)可以通过<import />引入进来。
3、DispatcherServlet配置(dispatcher-servlet.xml)
<context:component-scan base-package="com.moguhu.controller.*" />
上面配置是指定了DispatcherServlet所创建的上下文只扫描控制层的beans,当然在dispatcher-servlet.xml中还可以指定视图解析、JSON转换、上传下载等配置信息。
在上面的配置中,listener会创建Spring MVC环境的父类上下文。父类上下文创建完成之后,当初始化DispatcherServlet的时候,就会将之前初始化的context设置为parent。
如果将listener启动的上下文和Dispatcher中启动的上下文所扫描的包都是全部包的话,就会造成在子类context和父类context都有全部的自定义beans,如下图所示
在容器启动后获取bean的时候,也是先从子类容器中去获取bean,子类获取不到时,再到父类容器中去寻找。当子类容器中装载了Service和DAO时,控制层就会使用子类容器所装载的bean去执行。但是这里面的service是没有事务等功能的(没有Spring框架的配置),只是普通的bean,因此使用起来会有不可预知的问题。
相关文章推荐
- 分享微信开发Html5轻游戏中的几个坑
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- javascript prototype,executing,context,closure
- Zend的MVC机制使用分析(二)
- ASP.NET MVC 4 捆绑和缩小实例介绍
- ASP.NET MVC中将控制器分离到类库的实现
- asp.net实现在非MVC中使用Razor模板引擎的方法
- ASP.NET MVC中的AJAX应用
- 如何在MVC应用程序中使用Jquery
- jquery的父子兄弟节点查找示例代码
- ASP.NET MVC小结之基础篇(二)
- ASP.NET小结之MVC, MVP, MVVM比较以及区别(一)
- Asp.net实现MVC处理文件的上传下载功能实例教程
- ASP.NET MVC小结之基础篇(一)
- spring+html5实现安全传输随机数字密码键盘
- Spring中属性注入详解
- Flex中最好的MVC框架Mate框架
- struts2 spring整合fieldError问题