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 顺着前面的分析思路,我们很自然 ...
随机推荐
- 12,13 Proxy和Reflect
Proxy和Reflect Proxy(代理) Proxy用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种"元编程"(meta programming),即对编程 ...
- jmeter分布式操作-远程启动功能探索
一.背景: 之前在Jmeter插件监控服务器性能一篇中说到,在非GUI环境中监控时为了保存监控数据需要修改jmeter脚本,并且每次通过施压机(远程服务器,非GUI环境)来压测时都要将jmeter脚本 ...
- Quartz.NET总结(四)Quartz 远程调度
前面篇已经介绍了Quartz.NET的配置,使用和Cron表达式表达式的写法.基本上后台的定时任务的定时执行已经完成,并能正确的按照执行计划,执行相关的job . 然后,如果任务需要更新,停止某个任务 ...
- Windows下搭建PHP开发环境
PHP集成开发环境有很多,如XAMPP.AppServ......只要一键安装就把PHP环境给搭建好了.但这种安装方式不够灵活,软件的自由组合不方便,同时也不利于学习.所以我还是喜欢手工搭建PHP开发 ...
- redis技巧--IP地址查询对应城市
场景: 根据IP地址判断用户所在地,虽然网上有好多篇了,但我记录一个一看就懂的,不用看超长文字再自己理解了. 我们有城市和IP地址段的对应关系,如: 上海: 202.127.0.0 ~ 202.127 ...
- T-SQL 关闭数据库所有连接
原文引用自: http://www.cnblogs.com/kissazi2/p/3462202.html 下面给出一种删除数据库活动连接的方式.将下面代码段中的"--修改一下"处 ...
- asp.net MVC4 表单 - CheckBox兴趣爱好
1.Model层定义属性 public class vmUser { public string userName { get; set; } public string sex { get; set ...
- 一些关于angularJS的自己学习和开发过程中遇到的问题及解决办法
这篇文章也许会不定时更新,主要记录这段时间内自己遇到的angularjs学习开发的一些问题的解决办法.本文以摘抄为主,主要目的还是将自己遇到的困惑在各个地方查到的解决办法的汇总,给自己留个备忘吧. 1 ...
- iOS-关于使用其他应用打开本应用文档
简介:本片文章是对官方文档的翻译,非常的感谢文章的翻译者:颐和园 官方地址:Document Interaction Programming Topics for iOS 文章的介绍内容: ***** ...
- Tomcat 内存优化设置
vi /tomcat7.0/bin/catalina.sh 开发环境 #!/bin/sh JAVA_OPTS='-Xms128m -Xmx512m -XX:PermSize=128m' 服务器: #! ...