前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringMVC容器级联关系探究

SpringMVC容器级联关系探究

作者头像
加多
发布2018-09-06 14:46:19
4870
发布2018-09-06 14:46:19
举报

一、前言

SpringMvc是目前使用最频繁的框架,springmvc里面经常会使用两级级联容器,并且每层容器都各有用途,本文就来探究下这两层级联容器融合创建。

二、SpringMVC容器

使用过SpringMVC的童鞋都知道,一般我们在web.xml里面会配置一个listener和一个dispatcher,其实这就配置了两个spring IOC容器,并且dispatcher容器的父容器就是listener的容器。 一般在web.xml里面配置如下:

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>WEB-INF/applicationContext.xml</param-value>
</context-param>
<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

其中ContextLoaderListener会创建一个IOC容器使用XMLWebApplicationContext来管理,来管理contextConfigLocation配置的xml里面的bean. DispatcherServlet也会创建一个IOC容器使用XMLWebApplicationContext管理,默认管理web-info/springmvc-servlet.xml里面的Controller bean。

三、从源码分析容器级联关系

3.1 ContextLoaderListener创建容器

image.png

如图属性创建context,然后从servletContext获取在web.xml里面配置的xml文件路径,然后调用spring容器的refresh方法刷新容器解析bean定义,然后把创建好的context放入serlvetcontext的全局变量里面。

3.1 DispatcherServlet 创建容器

image.png

如图在DispatcherServlet的初始化方法中首先从全局变量表里面获取listener创建的context,然后使用该context作为父上下文创建了servlet的context容器,并且设置namespace为springmvc-servlet,这个在查找配置文件时候用到,最后会拼接为springmvc-servlet.xml,最后刷新容器

3.2 总结

综合3.1,3.2知道一般我们在lisenter容器里面配置bo类用来具体操作业务,在dispatcher容器里面配的Controller类,然后Controller里面具体调用bo类来实现业务。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.05.14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、SpringMVC容器
  • 三、从源码分析容器级联关系
    • 3.1 ContextLoaderListener创建容器
      • 3.1 DispatcherServlet 创建容器
        • 3.2 总结
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档