spring--绘制IoC时序图

本文深入探讨了Spring中的IoC(控制反转)概念,解释了其核心思想是对象的生命周期由IOC容器管理。接着,通过时序图展示了IoC的三个阶段:定位、加载和注册。在定位阶段,从ClassPathXmlApplicationContext开始,解析Bean定义资源文件;加载阶段涉及BeanDefinitionReader,解析XML资源;注册阶段则将BeanDefinition注册到beanDefinitionMap中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:什么是IoC

IoC:Inversion of Control,控制反转的意思,获得依赖对象的过程由自身管理变为了由IOC容器主动注入,由容器来管理对象的生命周期。

二:时序图
ioc时序图
三:浅析
ioc可以大致分为定位,加载,注册三个阶段。

1.定位阶段:

首先是定位阶段,源码的入口在ClassPathXmlApplicationContext的构造函数,在构造函数中调用setConfigLocations()解析Bean定义资源文件的路径,处理多个资源文件字符串数组。然后再调用refresh(),refresh()方法中通过obtainFreshBeanFactory()获取ConfigurableListableBeanFactory,obtainFreshBeanFactory()方法中调用refreshBeanFactory()方法,refreshBeanFactory()方法中调用createBeanFactory()方法创建IOC容器并且调用loadBeanDefinitions(beanFactory)方法,进入到加载阶段。

2.加载阶段

loadBeanDefinitions(DefaultListableBeanFactory beanFactory)方法中会创建一个beanDefinitionReader然后调用loadBeanDefinitions(beanDefinitionReader)方法,在loadBeanDefinitions(XmlBeanDefinitionReader reader)方法中会调用loadBeanDefinitions(Resource… resources)方法,接下来会调用loadBeanDefinitions(Resource resource)然后是loadBeanDefinitions(new EncodedResource(resource)),在loadBeanDefinitions(new EncodedResource(resource))方法中调用doLoadBeanDefinitions(inputSource, encodedResource.getResource()),
doLoadBeanDefinitions(InputSource inputSource, Resource resource)方法中调用registerBeanDefinitions(Document doc, Resource resource)方法,进入到注册阶段。

3.注册阶段

调用registerBeanDefinitions(Document doc, XmlReaderContext readerContext),接下来调用doRegisterBeanDefinitions(root),doRegisterBeanDefinitions方法中创建一个委派者,调用parseBeanDefinitions(Element root, BeanDefinitionParserDelegate delegate),接下来调用parseDefaultElement(ele, delegate)方法对bean元素进行解析,然后调用processBeanDefinition(Element ele, BeanDefinitionParserDelegate delegate),processBeanDefinition方法中调用BeanDefinitionReaderUtils工具类的registerBeanDefinition(
BeanDefinitionHolder definitionHolder, BeanDefinitionRegistry registry)方法,最后调用registerBeanDefinition(String beanName, BeanDefinition beanDefinition)方法将beanDefinition放入beanDefinitionMap中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值