spring在容器启动时,容器正式初始化入口refresh()
如下图 ①包括初始化FactoryBean、解析XML注册所有BeanDefinition信息  ②包括注册scope管理类  ③初始化单例、非延迟加载的类
(spring在同一个bean工厂容器中BeanDefinition不会有重名的,往容器注册BeanDefinition时会先判断是否存在  ①自动扫描的bean如果存在直接跳过  ②xml配置的bean如果会执行替换操作)

1、spring在DefaultBeanDefinitionDocumentReader的parseBeanDefinitions方法中解析xml文件、加载项目包中的spring.handlers文件中的xml解析处理类(spring使用的是java原生的DOM解析xml文件)
2、spring配置文件中的每个标签都有对应的解析处理类,如:spring自动扫描标签解析类是ComponentScanBeanDefinitionParser(自动扫描处理类:ClassPathBeanDefinitionScanner)
3、spring-bean、spring-context包中META-INF/spring.handlers是spring指定的对应命名空间标签解析处理类
4、我们可以根据自己的需要扩展spring的解析功能,例如阿里巴巴的dubbo项目就使用了自己的标签扩展了spring的标签处理类DubboNamespaceHandler

5、spring类定义默认是singleton、lazyInit=true,默认容器启动就会创建单例
6、假如配置中A类被B类引用时,即便A类不是singleton、lazyInit=true,spring容器创建B类时A类也会被创建
7、scope="prototype"的类容器只负责创建,spring不会管理它的生命周期
8、通过容器获取bean时都会调getBean方法,之后到AbstractBeanFactory的doGetBean方法进行创建前的处理判断
如下图中 ①判断当前bean工厂中是否有缓存  ②判断是否需父容器工厂处理(由ContextLoaderListener启动创建的容器 是 Servlet初始化创建的容器的父容器)  ③往下继续新建对象

9、正式开始新建bean对象是在AbstractAutowireCapableBeanFactory的doCreateBean方法中进行
如下图中 ①:创建实例  ②填充实例属性/引用相关值(依赖注入)  ③执行初始化bean(如:实现了InitializingBean接口的afterPropertiesSet方法)

参考文献:http://zk-chs.iteye.com/blog/2293013

 

spring加载过程,源码带你理解从初始化到bean注入的更多相关文章

  1. spring启动component-scan类扫描加载过程---源码分析

    http://blog.csdn.net/xieyuooo/article/details/9089441#comments

  2. 微服务架构 | *2.3 Spring Cloud 启动及加载配置文件源码分析(以 Nacos 为例)

    目录 前言 1. Spring Cloud 什么时候加载配置文件 2. 准备 Environment 配置环境 2.1 配置 Environment 环境 SpringApplication.prep ...

  3. Spring加载流程源码分析03【refresh】

      前面两篇文章分析了super(this)和setConfigLocations(configLocations)的源代码,本文来分析下refresh的源码, Spring加载流程源码分析01[su ...

  4. ElasticSearch 启动时加载 Analyzer 源码分析

    ElasticSearch 启动时加载 Analyzer 源码分析 本文介绍 ElasticSearch启动时如何创建.加载Analyzer,主要的参考资料是Lucene中关于Analyzer官方文档 ...

  5. Springboot学习04-默认错误页面加载机制源码分析

    Springboot学习04-默认错误页面加载机制源码分析 前沿 希望通过本文的学习,对错误页面的加载机制有这更神的理解 正文 1-Springboot错误页面展示 2-Springboot默认错误处 ...

  6. Springboot 加载配置文件源码分析

    Springboot 加载配置文件源码分析 本文的分析是基于springboot 2.2.0.RELEASE. 本篇文章的相关源码位置:https://github.com/wbo112/blogde ...

  7. Volley 图片加载相关源码解析

    转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/47721631: 本文出自:[张鸿洋的博客] 一 概述 最近在完善图片加载方面的 ...

  8. Webpack探索【16】--- 懒加载构建原理详解(模块如何被组建&如何加载)&源码解读

    本文主要说明Webpack懒加载构建和加载的原理,对构建后的源码进行分析. 一 说明 本文以一个简单的示例,通过对构建好的bundle.js源码进行分析,说明Webpack懒加载构建原理. 本文使用的 ...

  9. Spring Cloud Nacos实现动态配置加载的源码分析

    理解了上述Environment的基本原理后,如何从远程服务器上加载配置到Spring的Environment中. NacosPropertySourceLocator 顺着前面的分析思路,我们很自然 ...

随机推荐

  1. 利用django创建一个投票网站(一)

    这是教程的原始链接:http://django-intro-zh.readthedocs.io/zh_CN/latest/part1/ 创建你的第一个 Django 项目, 第一部分 来跟着实际项目学 ...

  2. theano sparse_block_dot

    theano 中的一个函数 sparse_block_dot; Function: for b in range(batch_size): for j in range(o.shape[1]): fo ...

  3. 纯JS判断各种浏览器类型及版本.

    IE11或者非IE if (!document.all) { alert('IE11+ or not IE'); } IE10 if (document.all && document ...

  4. WebService的使用

    转载至http://blog.csdn.net/yexuanbaby/article/details/9029605/ 第一次选择WebService,是为了替代数据库远程连接.我们都知道当SQL允许 ...

  5. 关于ajax请求,在参数中添加时间戳的必要性

    之前做项目的时候,看到别人的前端ajax请求代码中,都会带有一个时间戳类型的参数,当时随便查了一下,是为了防止浏览器缓存的原因,所以也没有进行深究,每次写的时候也习惯性的带一个,最近新项目中,我发现好 ...

  6. Android中Service通信(一)——启动Service并传递数据

    启动Service并传递数据的小实例(通过外界与服务进行通信): 1.activity_main.xml: <EditText android:layout_width="match_ ...

  7. showPrompt弹框提示

    工作中会有很多的弹框,用来添加模板,用来信息提示,,我现在用的模板有dialog(用来添加数据模板内容),还有一个就是自写的showPrompt用来判断错误或者正确的信息~~ 样子大概就是这样的,, ...

  8. Why did I have a recovery trip

    For more than a decade, I felt most at ease living out of a suitcase, never quite sure where I might ...

  9. 计算sql语句的查询时间

    set statistics profile on set statistics io on set statistics time on go <这里写上你的语句...> go set ...

  10. Java Web ——http协议响应报文

    HTTP 响应报文 HTTP 响应报文由状态行.响应头部.空行 和 响应包体 4 个部分组成,如下图所示: 下面对响应报文格式进行简单的分析: 状态行:状态行由 HTTP 协议版本字段.状态码和状态码 ...