java代码启动spring_从0开始学JAVA之《Spring框架-启动过程》

本文是以初学者角度记录学习JAVA过程,无指导之意,如有错误,请各位大神不吝指教。

希望能够通过文章编写监督自我上进,与初学者共勉!!!上篇文章我们已经初步认识 Spring 框架,接下来我们结合实际应用来加深对框架设计思路的理解。Spring 框架的内容有很多,上篇文章也仅仅是入门简介,接下来我们结合应用逐步深入的来学习 Spring 框架。

1,应用之前 我们先了解一下 Spring 的启动过程

理解 Spring 启动过程很重要,开始看不懂也没有关系,后面要反复结合应用来理解他

a,首先,对于 web 应用,其部署在 web 容器中,web 容器提供一个全局上下文环境,这个上下文环境就是 ServletContext 。

为什么要介绍 ServletContext? 因为 ServletContext 为 Spring IOC 容器提供了宿主环境。

b,其次,在 web.xml 中会提供有 contextLoaderListener 监听器。

contextLoaderListener 监听器干了什么事?

在 web 容器启动的时候,会触发容器初始化事件,此时 contextLoaderListener 会监听到这个事件,其 contextInitialized 的方法会被调用。

contextInitialized 方法干了什么事?

在这方法中,spring 会初始化一个启动上下文,这个上下文被称为根上下文,也就是 WebApplicationContext,这是一个接口类,确切的说其实际的实现类是 XmlWebApplicationContext。

到这里之后我们就理解了什么是 Spring IOC 容器,没错就是 WebApplicationContext。

Spring IOC 容器对应 Bean 定义的配置由 web.xml 中的 context-param 标签指定。

容器启动时,会以 context-param 作为键值对放到ServletContext中。

Bean 是个什么东西呀?

在 Spring 中,构成应用程序主干并由 Spring IoC 容器管理的对象称为 Bean 。 Bean 是一个由 Spring IoC 容器实例化、组装和管理的对象。

Spring IOC 容器初始化完成之后,Spring 以 WebApplicationContext.ROOTWEBAPPLICATIONCONTEXTATTRIBUTE 为属性 key,将其存储在 ServletContext 中,便于获取。

c,再次,contextLoaderListener 监听器初始化完之后,开始初始化 web.xml 中配置的 Servlet,这个 Servlet 可以配置多个,以最常见的 DispatcherServlet 为例。

DispatcherServlet 是个什么东西?

DispatcherServlet 是一个标准的前端控制器,用以转发、匹配、处理每个 Servlet 请求。

DispatcherServlet 上下文在初始化的时候,会建立自己的 IOC 上下文,用以持有 Spring Mvc 相关的东西。

DispatcherServlet 如何创建自己的上下文?

DispatcherServlet 创建上下文的时候,会利用 WebApplicationContext.ROOTWEBAPPLICATIONCONTEXTATTRIBUTE 先从 ServletContext 中获取之前的根上下文(WebApplicationContext)作为自己上下文的 parent 上下文。有了这个 parent 上下文之后,在初始化自己持有的上下文。

DispatcherServlet 在初始化自己上下文的时候,在 initStrategies 方法中可以看到。

大概的工作就是初始化处理器映射、视图解析等。

DispatcherServlet 自己持有的上下文默认实现类也是 XmlWebApplicationContext,

Spring 以与servlet 的名字相关(此处不是简单的以servlet名为Key,而是通过一些转换,具体可自行查看源码)的属性为属性 Key,也将其存储在 ServletContext 中,以便后续用。

这样每个 servlet 就持有自己的上下文,即拥有自己独立的 Bean 空间,同时各个 servlet 共享相同的 Bean,也就是根上下文定义的那些 Bean 被各个 servlet 所共享。

理解 Spring 启动过程之后,后面我们实际应用 Spring 时,就会很容易理解需要配置哪些东西,为什么要那么配置等等。反复琢磨吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值