一、一切从手动启动IoC容器开始

  1. ClassPathResource resource = new ClassPathResource("bean.xml");
  2. DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
  3. XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);
  4. reader.loadBeanDefinitions(resource);

第一行代码:ClassPathResource的作用是起到了资源定位的作用。通常情况下,spring的配置信息使用文件来描述,通过这样一行代码,指明了需要加载的资源的位置,并且使用Spring能够理解的Resource接口的形式将资源描述出来。

第二行代码:DefaultListableBeanFactory是一个纯粹的IoC容器类,它是这个Spring的一个基础的IoC容器类,其他的一个IoC容器都是以这个类为基础进行扩展的。这样代码只是定义了一个IoC容器,它不具有任何其他的能力。

第三行代码:XmlBeanDefinitionReader是一个配置文件读取器。它实现了BeanDefinitionReader接口,它能够按照Spring配置文件,将其中的配置信息转换为spring内部可以识别的信息(BeanDefinition)。注意,在这里它的构造函数需要一个BeanDefinitionRegistry类型的参数,BeanDefinitionRegistry接口提供了一个回调函数,通过这个回调函数可以向IoC容器注册bean的定义信息。DefaultListableBeanFactory实现了这个接口。

第四行代码:调用loadeBeanDefinitions方法,通过给定的Resource资源,从中读取出spring的配置信息,转换为BeanDefinition,然后再调用BeanDefinitionRegistry的回调函数进行注册。

通过以上的四行代码,完成了spring容器的启动。

二、容器启动过程

1. 定位

在spring中,使用统一的资源表现方式Resource。根据不同的情况进行不同的选择。上述程序中,采用了编程式的资源定位方法,使用ClassPathResource定位位于classpath下的资源文件。

2. 加载

在加载这个过程中,主要工作是读取spring配置文件,解析配置文件中的内容,将这些信息转换成为Spring内容可以理解、使用的BeanDefinition。

3. 注册

加载过配置文件后,就将BeanDefinition信息注册到BeanDefinitionRegistry中,通常情况下Spring容器的实现类都实现这个接口。

spring容器启动过程理解的更多相关文章

  1. spring容器启动过程

    1.AbstractApplicationContext的prepareRefresh()方法调用. 2.XmlBeanDefinitionReader的loadBeanDifinitions(Bea ...

  2. 转:spring的启动过程-spring和springMVC父子容器的原理

    要想很好理解这三个上下文的关系,需要先熟悉spring是怎样在web容器中启动起来的.spring的启动过程其实就是其IoC容器的启动过程,对于web程序,IoC容器启动过程即是建立上下文的过程. s ...

  3. Spring源码解析-Web容器启动过程

    Web容器启动过程,主要讲解Servlet和Spring容器结合的内容. 流程图如下: Web容器启动的Root Context是有ContextLoaderListener,一般使用spring,都 ...

  4. spring的启动过程就是创建ioc容器的过程

    1. spring简介 spring的最基本的功能就是创建对象及管理这些对象之间的依赖关系,实现低耦合.高内聚.还提供像通用日志记录.性能统计.安全控制.异常处理等面向切面的能力,还能帮我们管理最头疼 ...

  5. Spring源码分析专题 —— IOC容器启动过程(上篇)

    声明 1.建议先阅读<Spring源码分析专题 -- 阅读指引> 2.强烈建议阅读过程中要参照调用过程图,每篇都有其对应的调用过程图 3.写文不易,转载请标明出处 前言 关于 IOC 容器 ...

  6. Spring Boot启动过程(四):Spring Boot内嵌Tomcat启动

    之前在Spring Boot启动过程(二)提到过createEmbeddedServletContainer创建了内嵌的Servlet容器,我用的是默认的Tomcat. private void cr ...

  7. Spring MVC启动过程(1):ContextLoaderListener初始化

    此文来自https://my.oschina.net/pkpk1234/blog/61971 (写的特别好)故引来借鉴 Spring MVC启动过程 以Tomcat为例,想在Web容器中使用Spirn ...

  8. 【Spring】简述@Configuration配置类注册BeanDefinition到Spring容器的过程

    概述 本文以SpringBoot应用为基础,尝试分析基于注解@Configuration的配置类是如何向Spring容器注册BeanDefinition的过程 其中主要分析了 Configuratio ...

  9. Spring Boot启动过程(七):Connector初始化

    Connector实例的创建已经在Spring Boot启动过程(四):Spring Boot内嵌Tomcat启动中提到了: Connector是LifecycleMBeanBase的子类,先是设置L ...

随机推荐

  1. 院校-美国:麻省理工学院(MIT)

    ylbtech-院校-美国:麻省理工学院(MIT) 麻省理工学院(Massachusetts Institute of Technology),简称麻省理工(MIT),坐落于美国马萨诸塞州波士顿都市区 ...

  2. php gd

    imagecopy() 函数用于拷贝图像或图像的一部分. imagecopyresized() 函数用于拷贝部分图像并调整大小. imagecopy() imagecopy() 函数用于拷贝图像或图像 ...

  3. Java多线程编程那些事:volatile解惑--转

    http://www.infoq.com/cn/articles/java-multi-thread-volatile/ 1. 前言 volatile关键字可能是Java开发人员“熟悉而又陌生”的一个 ...

  4. oracle scott趣事

    Oracle里面是scott是个什么用户呢? 这个就要追朔到Oracle的创业阶段了, 1977年6月,埃里森,Bob Miner和Ed Oates在硅谷共同创办了一家名为软件开发实验室(Softwa ...

  5. Nginx 404 500

    Nginx反向代理自定义404错误页面 http中添加 proxy_intercept_errors on; server中添加 error_page 404 = https://www.longda ...

  6. Unity3d transform

    using UnityEngine; using System.Collections; public class transform : MonoBehaviour { // Use this fo ...

  7. js+css模仿打字效果

    1.效果 2.源码 <%@ page contentType="text/html;charset=UTF-8" language="java" %> ...

  8. css3 flex 详解,可以实现div内容水平垂直居中

    先说一下flex一系列属性: 一.flex-direction: (元素排列方向) ※ flex-direction:row (横向从左到右排列==左对齐) ※ flex-direction:row- ...

  9. js手机网络检测

    <!DOCTYPE HTML> <html lang="en"> <head> <meta charset=UTF-8"> ...

  10. CV与IP:基础,经典以及最近发展

    原文链接:http://blog.csdn.net/dcraw/article/details/7617891 原文编写层层递进,逻辑清晰: 不过看这篇转载可以少点击鼠标:http://blog.cs ...