本文是以初学者角度记录学习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 时,就会很容易理解需要配置哪些东西,为什么要那么配置等等。反复琢磨吧。

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

  1. 0基础学Java需要多久?

    0基础学Java需要多久?黑马程序员零基础系统学习的Java课程课时348小时,至少要学习5-6个月的时间,不同的课程大纲课时也不一样,具体课看课程的详情:Java基础课程课时在5-20小时不等,根据 ...

  2. 【0基础学java】教学日志:javaSE-面向对象6-面向对象前4章上机作业点评,主要涉及继承、封装、多态三个章节的内容

    目录 一.面向对象第一章上机作业参考答案(略) 二.面向对象第二章上机作业参考答案: 三.面向对象第三章上机作业参考答案: 1.上机练习1已在第三章博客中编写,请参考: 2.上机练习2 四.面向对象第 ...

  3. 0基础学java有多难?自学Java和参加培训学Java的难易度对比分析!

    在一些知识问答平台上,我看到有很多在问"0基础学java有多难",如果你想0基础自学Java那可能会比较困难,但是如果选择报培训班进行学习,即便是0基础,学Java其实也并不难.所 ...

  4. 什么都不懂的学java难不难_零基础转行学java到底难不难

    不少零基础的新手想要转行学习java可是不知道难度,南京学码思下面就给大家详细的说一说转行java的难度,希望能帮助到各位想要了解java的同学. 零基础转行学java到底难不难 新手转行学java到 ...

  5. 女生学java开发难吗?女生适合学java吗?

    女生学java开发?Java开发看上去是一项系统性很强.入门很难的"高大上"学科,前端.代码这些普通人基本不会接触到的名词,吓怕了众多初学者.大部分人对于Java程序员都有一个既定 ...

  6. Java前景如何?现在还能学Java吗?

    Java是目前世界上最流行的计算机编程语言,是一种可以编写跨平台应用软件的面向对象的程序设计语言.随着互联网的快速发展,对于程序员的需求量很大.那么Java前景如何?新手还能学Java吗?本文小千给大 ...

  7. 6年Java老鸟聊聊新人到底要不要学Java,从事互联网《打工人的那些事》

    6年Java老鸟聊聊新人到底要不要学Java,从事互联网<打工人的那些事> 文章目录 为什么有本文 一些客观事实 优势 劣势 点题 数据来源参考地址 大家为什么选择互联网编程这条路,估摸着 ...

  8. 2019年Java就业前景如何?新手还能学Java开发吗?

    2019年Java就业前景如何?新手还能学Java开发吗?Java是目前世界上最流行的计算机编程语言,是一种可以编写跨平台应用软件的面向对象的程序设计语言.随着互联网的快速发展,对于程序员的需求量很大 ...

  9. java包间通信,诊断Java代码: 消除包间的耦合关联[Java编程]

    赞助商链接 本文"诊断Java代码: 消除包间的耦合关联[Java编程]"是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自 ...

最新文章

  1. LabelMe图像数据集下载
  2. 在阿里当PM都需要做什么?
  3. Hibernate 基本配置文件+基本增删改查
  4. 用VS.NET 2005重构你的代码
  5. boost::mp11::tuple_transform相关用法的测试程序
  6. ios uitableview 去掉多余的空行
  7. Idea日常使用记录
  8. WINDOWS8.1 安装 .NET35方法
  9. BIM新时代背景下的建筑业技术变革
  10. Java8时间转换(LocalDateTime)代码实例
  11. linux gulp安装教程,Linux环境NodeJS安装及Gulp安装
  12. linux lvm的管理
  13. 菜鸟上网必备知识大全
  14. 计算机原理实验交通灯自动控制系统设计,微机原理交通灯控制系统设计实验..doc...
  15. SoundPool基本用法
  16. 程序带来这些新的机会,创业新浪潮才刚开始!
  17. Centos7配置ssh、rsh免密互信集群服务
  18. 在纪中的第二天,2017-7-8 总结:
  19. ​PC电脑流行的主要原因
  20. 百度知道的代码复制粘贴到VB没有换行怎么办

热门文章

  1. java.sql.SQLException: ORA01555: 快照过旧: 回退段号 4 过小
  2. 02-eclipse中使用git
  3. 数据结构知识点大汇总(七)
  4. 【设计模式:单例模式】单例模式02:懒汉模式
  5. 看了这个有趣的例子,你就能秒懂Java中的多线程同步了!
  6. 在idea中使用CheckStyle来规范代码
  7. VCL组件之TPanel
  8. E: Sub-process /usr/bin/dpkg returned an error code (1) Ubuntu安装apt-get命令报错
  9. Spring Cloud 知识 思维导图
  10. python从入门到大神---4、python3文件操作最最最最简单实例