SpringMVC容器级联关系探究

阿里巴巴长期招聘Java研发工程师p6,p7,p8等上不封顶级别,有意向的可以发简历给我,注明想去的部门和工作地点:[email protected]

欢迎关注微信公众号:技术原始积累 获取更多技术干货

一、前言

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

二、SpringMVC容器

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


    org.springframework.web.context.ContextLoaderListener



    contextConfigLocation
    WEB-INF/applicationContext.xml


    springmvc
    org.springframework.web.servlet.DispatcherServlet
    1

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

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

3.1 ContextLoaderListener创建容器

SpringMVC容器级联关系探究_第1张图片
image.png

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

3.1 DispatcherServlet 创建容器

SpringMVC容器级联关系探究_第2张图片
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类来实现业务。

欢迎关注微信公众号:技术原始积累 获取更多技术干货

image.png

你可能感兴趣的:(SpringMVC容器级联关系探究)