黑马程序员技术交流社区
标题: Spring框架与Springmvc框架容器详解 [打印本页]
作者: 长沙-小知姐姐 时间: 2019-2-25 11:49
标题: Spring框架与Springmvc框架容器详解
本帖最后由 长沙-小知姐姐 于 2019-2-25 14:20 编辑
spring框架与Springmvc框架概述
现在做为java开发的程序员,我相信基本上每个人都听说过Spring框架,而SpringMVC框架也逐渐的替代了原来的一些MVC框架,成为了Web层框架的佼佼者,但是SpringMVC框架其实本身也是Spring 框架的一个后续产品,这两个框架在结合到一起使用的时候Spring会有自己的IOC容器,而Springmvc也会有自己的ioc容器,两个框架一起使用的时候会有一些什么样的问题,或者两个框架的容器直接是一种什么样的关系,今天我们一起来讨论一下
spring框架与Springmvc框架整合使用的细节
Springmvc框架的基本使用
在理解spring框架与Springmvc框架一起使用时的两个容器关系之前,我们先对SpringMVC框架的使用步骤做一个简单介绍,以下是SpringMVC在使用的时候的基本代码
1. 在web项目的web.xml文件中配置Springmvc前端控制器
2. 在项目中创建springmvc的配置文件
3. 当做了前面两个配置之后就能直接在项目中创建Controller类和方法去接收请求
Springmvc的基本执行过程
当我们做了上面的一些事情之后,服务器在启动的时候就会去创建Springmvc的前端控制器(DispatcherServlet),这个Servlet一创建就会帮助我们去加载Springmvc的配置文件,从而初始化Springmvc的容器,创建所有的Controller。以后发送请求的时候,执行的过程会经过Springmvc的各个组件,大致流程如下图
spring框架与Springmvc框架整合使用
1. spring框架与Springmvc框架整合使用的思路
当我们在实际案例中去使用SpringMVC的时候由于我们需要在Controller中注入Service,所以我们必须要保证Controller对象创建之前Service对象要创建,而我们都知道Service最终都会交给Spring去管理,所以Spring的容器应该要先于Springmvc的容器创建才行
2.具体代码实现
代码实现很简单,想要web项目在加载Springmvc的配置之前先加载Spring的配置,只需要在web.xml文件中配置一下Spring的监听器和配置文件位置就可以
spring框架与Springmvc框架一起使用后两个容器的关系
spring框架与Springmvc框架一起使用后Spring会有Spring的容器,在Spring容器中会创建Service,Dao层的对象,当然也会有SpringMVC的容器,SpringMVC容器会创建Controller对象,那么当我们去发送请求到Controller中去的时候,Controller中会注入Service对象,SpringMVC容器中的Controller对象是如何去注入Spring容器中的service对象的,相信部分刚接触SpringMVC框架的学者会在这个地方有疑问,那么接下来我们就一起去跟着Spring和SpringMVC源码一起来揭秘一下这个问题:
Spring容器加载
首先我们都知道,服务器一启动会去去执行Spring监听器中的代码加载Spring配置文件初始化容器,我们先去看看这一部分Spring是如何去完成的。
通过这一部分源码我们发现,服务器已启动,listener中确实会帮我们去创建Spring容器,但是他还会做一件事情,就是将容器保存到ServletContext域对象中
SpringMVC容器加载
从Springmvc源代码中可以看到SpringMVC容器初始化的过程如下图:
SpringMVC的容器在初始化的时候,会把原来已经保存在ServletContext中的Spring容器设置成SpringMVC的父容器,也就是说Spring容器和SpringMVC容器直接是一种逻辑上的父子关系,SpringMVC容器是子容器,Spring容器是父容器,所以在SpringMVC容器中的Controller能注入Spring容器中的service对象
总结
通过前面的分析,这样我们在清楚了spring和springMVC的父子容器关系;所以在项目中当我们同时去使用Spring框架和Springmvc框架的时候,Springmvc中的Controller能够访问到Springmvc父容器(Spring容器)中的对象
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |