spring加载过程,源码带你理解从初始化到bean注入
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方法)
spring加载过程,源码带你理解从初始化到bean注入的更多相关文章
- spring启动component-scan类扫描加载过程---源码分析
http://blog.csdn.net/xieyuooo/article/details/9089441#comments
- 微服务架构 | *2.3 Spring Cloud 启动及加载配置文件源码分析(以 Nacos 为例)
目录 前言 1. Spring Cloud 什么时候加载配置文件 2. 准备 Environment 配置环境 2.1 配置 Environment 环境 SpringApplication.prep ...
- Spring加载流程源码分析03【refresh】
前面两篇文章分析了super(this)和setConfigLocations(configLocations)的源代码,本文来分析下refresh的源码, Spring加载流程源码分析01[su ...
- ElasticSearch 启动时加载 Analyzer 源码分析
ElasticSearch 启动时加载 Analyzer 源码分析 本文介绍 ElasticSearch启动时如何创建.加载Analyzer,主要的参考资料是Lucene中关于Analyzer官方文档 ...
- Springboot学习04-默认错误页面加载机制源码分析
Springboot学习04-默认错误页面加载机制源码分析 前沿 希望通过本文的学习,对错误页面的加载机制有这更神的理解 正文 1-Springboot错误页面展示 2-Springboot默认错误处 ...
- Springboot 加载配置文件源码分析
Springboot 加载配置文件源码分析 本文的分析是基于springboot 2.2.0.RELEASE. 本篇文章的相关源码位置:https://github.com/wbo112/blogde ...
- Volley 图片加载相关源码解析
转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/47721631: 本文出自:[张鸿洋的博客] 一 概述 最近在完善图片加载方面的 ...
- Webpack探索【16】--- 懒加载构建原理详解(模块如何被组建&如何加载)&源码解读
本文主要说明Webpack懒加载构建和加载的原理,对构建后的源码进行分析. 一 说明 本文以一个简单的示例,通过对构建好的bundle.js源码进行分析,说明Webpack懒加载构建原理. 本文使用的 ...
- Spring Cloud Nacos实现动态配置加载的源码分析
理解了上述Environment的基本原理后,如何从远程服务器上加载配置到Spring的Environment中. NacosPropertySourceLocator 顺着前面的分析思路,我们很自然 ...
随机推荐
- 利用django创建一个投票网站(一)
这是教程的原始链接:http://django-intro-zh.readthedocs.io/zh_CN/latest/part1/ 创建你的第一个 Django 项目, 第一部分 来跟着实际项目学 ...
- theano sparse_block_dot
theano 中的一个函数 sparse_block_dot; Function: for b in range(batch_size): for j in range(o.shape[1]): fo ...
- 纯JS判断各种浏览器类型及版本.
IE11或者非IE if (!document.all) { alert('IE11+ or not IE'); } IE10 if (document.all && document ...
- WebService的使用
转载至http://blog.csdn.net/yexuanbaby/article/details/9029605/ 第一次选择WebService,是为了替代数据库远程连接.我们都知道当SQL允许 ...
- 关于ajax请求,在参数中添加时间戳的必要性
之前做项目的时候,看到别人的前端ajax请求代码中,都会带有一个时间戳类型的参数,当时随便查了一下,是为了防止浏览器缓存的原因,所以也没有进行深究,每次写的时候也习惯性的带一个,最近新项目中,我发现好 ...
- Android中Service通信(一)——启动Service并传递数据
启动Service并传递数据的小实例(通过外界与服务进行通信): 1.activity_main.xml: <EditText android:layout_width="match_ ...
- showPrompt弹框提示
工作中会有很多的弹框,用来添加模板,用来信息提示,,我现在用的模板有dialog(用来添加数据模板内容),还有一个就是自写的showPrompt用来判断错误或者正确的信息~~ 样子大概就是这样的,, ...
- 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 ...
- 计算sql语句的查询时间
set statistics profile on set statistics io on set statistics time on go <这里写上你的语句...> go set ...
- Java Web ——http协议响应报文
HTTP 响应报文 HTTP 响应报文由状态行.响应头部.空行 和 响应包体 4 个部分组成,如下图所示: 下面对响应报文格式进行简单的分析: 状态行:状态行由 HTTP 协议版本字段.状态码和状态码 ...