Spring IOC过程
https://www.processon.com/diagraming/5c96171fe4b0f88919b98497
1. AbstractApplicationContext:执行refresh()方法;让子类实现obtainFreshBeanFactory()方法;
2. 子类AbstractRefreshableApplicationContext实现refreshBeanFactory()方法
创建IOC容器(DefaultListableBeanFactory);
委派子类实现loadBeanDefinitions()方法;
3. AbstractXmlApplicationContext:执行loadBeanDefinition()
创建XmlBeanDefinitionReader(Bean容器读取器,容器使用该读取器读取Bean定义资源);
loadBeanDefinitions(beanDefinitionReader);
setConFigLocations();获取配置文件路径;
reader.loadBeanDefinitions(configLocations):Bean容器读取器读取定位Bean定义资源.
4. AbstractBeanDefinitionReader:执行loadBeanDefinitions
getResourceLoader():获取IOC容器初始化过程中设置的资源加载器
Resource[] resources = ((ResourcePatternResolver) resourceLoader).getResources(location);将指定位置的 Bean 定义资源文件解析为 Spring IOC 容器封装的资源
int count = loadBeanDefinitions(resources); 委派调用其子类 XmlBeanDefinitionReader 的方法,实现加载功能
5. XmlBeanDefinitionReader:执行doLoadBeanDefinitions()
doLoadDocument:将XML文件转换为DOM对象;
registerBeanDefinitions:解析Bean的详细过程;
创建BeanDefinitionDocumentReader:用来对xml格式的BeanDefinition解析;
DocumentReader.registerBeanDefinitions:具体的解析实现过程由DefaultBeanDefinitionDocumentReader来实现。
6. DefaultBeanDefinitionDocumentReader:执行registerBeanDefinitions
创建BeanDefinitionParserDelegate对象用来真正执行解析Bean的工作
preProcessXml:解析Bean定义之前,进行自定义解析
parseBeanDefinitons()
parseDefaultElement:使用Spring的Bean规则解析元素节点
解析<Import>元素
解析<Alias>元素
解析<Bean>元素
获取BeanDefinitionHolder(BeanDefinitionHolder 是对 BeanDefinition 的封装,即Bean定义的封装类)
BeanDefinitionParserDelegate.parseBeanDefinitionElement
parseBeanDefinitionElement:详细对<Bean>元素中配置的 Bean 定义进行解析的地方
BeanDefinitionReaderUtils.registerBeanDefinition:向Spring IOC容器注册解析得到的Bean定义,这是Bean定义向IOC容器注册的入口
registry.registerBeanDefinition(beanName, definitionHolder.getBeanDefinition()):向 IOC 容器注册 BeanDefinition
解析嵌套Bean元素
postProcessXml:解析Bean定义之后,进行自定义解析
Spring IOC过程的更多相关文章
- 【Spring】Spring IOC原理及源码解析之scope=request、session
一.容器 1. 容器 抛出一个议点:BeanFactory是IOC容器,而ApplicationContex则是Spring容器. 什么是容器?Collection和Container这两个单词都有存 ...
- 【初探Spring】------Spring IOC(三):初始化过程---Resource定位
我们知道Spring的IoC起到了一个容器的作用,其中装得都是各种各样的Bean.同时在我们刚刚开始学习Spring的时候都是通过xml文件来定义Bean,Spring会某种方式加载这些xml文件,然 ...
- Spring IoC容器的初始化过程
Spring IoC容器的初始化包括 BeanDefinition的Resource定位.载入和注册 这三个基本的过程.IoC容器的初始化过程不包含Bean依赖注入的实现.Bean依赖的注入一般会发生 ...
- Spring IOC 容器源码分析 - 创建单例 bean 的过程
1. 简介 在上一篇文章中,我比较详细的分析了获取 bean 的方法,也就是getBean(String)的实现逻辑.对于已实例化好的单例 bean,getBean(String) 方法并不会再一次去 ...
- Spring IOC容器创建bean过程浅析
1. 背景 Spring框架本身非常庞大,源码阅读可以从Spring IOC容器的实现开始一点点了解.然而即便是IOC容器,代码仍然是非常多,短时间内全部精读完并不现实 本文分析比较浅,而完整的IOC ...
- Spring源码剖析2:Spring IOC容器的加载过程
spring ioc 容器的加载流程 1.目标:熟练使用spring,并分析其源码,了解其中的思想.这篇主要介绍spring ioc 容器的加载 2.前提条件:会使用debug 3.源码分析方法:In ...
- JAVA模拟Spring实现IoC过程(附源码)
前言:本人大四学生,第一次写博客,如果有写得不好的地方,请大家多多指正 一.IoC(Inversion of Control)反转控制 传统开发都是需要对象就new,但这样做有几个问题: 效率低下,创 ...
- Spring源码剖析3:Spring IOC容器的加载过程
本文转自五月的仓颉 https://www.cnblogs.com/xrq730 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https ...
- Spring IOC 启动过程
1. 引言 本篇博文主要介绍 IOC 容器的启动过程,启动过程分为两个步骤,第一个阶段是容器的启动阶段,第二个阶段是 Bean 实例化阶段,这两个阶段各自需要执行的步骤如下图,接下来会一一介绍. 需要 ...
随机推荐
- asp.net mvc-identity初步学习
Install-Package Microsoft.AspNet.Identity.EntityFramework Install-Package Microsoft.AspNet.Identity. ...
- 如何打开WCF测试客户端
- Linux中/etc/init.d
原文链接:http://blog.163.com/laorenyuhai126@126/blog/static/193507792010525110516/ 在这个目录下的档案都是连结档,均指向到 ...
- 今天又犯了Java/Scala里面substring的错误
每次都误以为是 substring(startIndex, length) 其实是 substring(startIndex, endIndex) 嗯 Java/Scala 跟 C++ 是不一样的.
- JAVAEE之--------过滤器设置是否缓存(Filter)
在网页中.每次的client訪问server.有部分不用反复请求.如有些图片,视频等就没有必要每次都请求,这样会让server增大工作量.为了防止这样.我们採用过滤器来设置client是都缓存. 參考 ...
- UI_UISlider控件
#pragma mark - 创建控件 UISlider - (void)createSlider { // 也是继承与 UIControl UISlider *slider = [[UISlider ...
- Android之弹出菜单框【注冊上下文菜单】
注冊上下文菜单:(长按弹出一个菜单) 第一种创建方法(与长按事件结合): public class MainActivity extends Activity { private TextView u ...
- WebBrowser网页操作之提取获取元素和标签(完整篇)
最近使用WebBrower做了几个Hook小程序,收集积累如下: using System; using System.Collections.Generic; using System.Linq; ...
- Tarjan 求图点强联通,桥的应用
在图中求双联通和强联通分量是我们解决非树结构的图连通问题的利器 通过求求图的双联通和强联通分量能把图转化成DAG进行求解: 行走 Description 给出一个有向图,你可以选择从任意点出发走到任意 ...
- js 判断设备的来源
function deviceType(){ var ua = navigator.userAgent; var agent = ["Android", "iPhone& ...