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. 查看Mysql版本号 (最简单的是status )

    一.使用命令行模式进入mysql会看到最开始的提示符;二.命令行中使用status可以看到;三.使用系统函数等等,   查看版本信息 #1使用命令行模式进入mysql会看到最开始的提示符 Your M ...

  2. UTF-8编码的空格(194 160)问题

    前台的字符串传递到后台进行处理,发现了一个较诡异的问题:字符串中的一个空格(ASCII:32)被UTF-8编码之后变成了一个诡异的字符(ASCII:194 和 160的组合)!但在后台其表象还是空格. ...

  3. webapi-test

  4. iOS8新特性(1)-UIPopoverPresentationController使用

    从iOS 8开始,苹果提出新的 UIPopoverPresentationController代替UIPopoverController: 新的UIPopoverPresentationControl ...

  5. ROLAP和MOLAP的概念和差别

    ROLAP和MOLAP的概念和差别OLAP(on-Line Analysis Processing)是使分析人员.管理人员或执行人员能够从多角度对信息进行快速.一致.交互地存取,从而获得对数据的更深入 ...

  6. Git on Windows 一些问题

    问题汇总 1. 卸载Git时,bin和usr目录删不掉 报错:bin, usr目前需要admin权限删除,或者这个目录被其他文件引用 打开taskmgr,找到所有引用 git/bin/ 下的文件的进程 ...

  7. iOS小知识:计算字符串长度(如果有表情,表情的长度为1)

    在做项目的时候,textField能够输入表情,但是iOS的表情是占两个字符的,再计算字符串长度的时候就和想象的不一样了,所以用了次方法会将表情的长度转成1,最后得到的字符串的长度就是能看到的实际的长 ...

  8. Canvas制作天气预报走势图

    要实现的效果如下图: HTML代码如下: ;;;;;;;;;;; }

  9. C和指针 第十六章 标准函数库

    字符串转换: long int strtol(char const *string, char **unused, int base); 将字符串转换为数值形式,遇到非法字符停止,如果stop不是NU ...

  10. bootstarp

    我最近在学一个前端框架叫bootstarp.我的老大给了一个bootstarp的模板给我,我看了看感觉没意思.因为那里面的样式,我也会写,所以我就没心思去看,每次只要面板上有的我就搬下来就完了,只要面 ...