Spring源码深度解析(第2版)- 时序图及源码(js-sequence-diagrams)

一、前言

UML时序图,又叫序列图或者顺序图,是一种用来描述对象之间传送消息的时间顺序,是用来表示用例中的行为顺序。

画图工具:http://webchart.ihuhai.cn/index.html(基于js-sequence-diagrams

重画书中的时序图,加深对源码的理解。

二、时序图

public static void main(String[] args) throws IOException {
		//测试
		ClassPathResource classPathResource = new ClassPathResource("beans.xml");
		BeanFactory bf = new XmlBeanFactory(classPathResource);
		MyTestBean myTestBean = (MyTestBean) bf.getBean("myTestBean");
		System.out.println(myTestBean.getA());
}

1.XmlBeanFactory 初始化时序图

2.5容器的基础XmlBeanFactory

title:XmlBeanFactory 初始化时序图
Test->ClassPathResource: new ClassPathResource("beans.xml")
ClassPathResource-->Test:classPathResource
Test->XmlBeanFactory:new XmlBeanFactory(classPathResource)
XmlBeanFactory-->XmlBeanFactory: new XmlBeanDefinitionReader(this):reader
XmlBeanFactory->XmlBeanDefinitionReader:this.reader.loadBeanDefinitions(resource)
XmlBeanDefinitionReader-->XmlBeanFactory:loadBeanDefinitions(new EncodedResource(resource)):int
XmlBeanFactory-->Test:bf:BeanFactory

2.loadBeanDefinitions 函数执行时序图

2.5.2加载Bean

title:loadBeanDefinitions 函数执行时序图
XmlBeanFactory->reader:XmlBeanDefinitionReader:loadBeanDefinitions(resource)
reader:XmlBeanDefinitionReader->encodedResource:EncodedResource:new EncodedResource(resource)
encodedResource:EncodedResource-->reader:XmlBeanDefinitionReader:encodedResource:EncodedResource
reader:XmlBeanDefinitionReader-->reader:XmlBeanDefinitionReader:loadBeanDefinitions(encodedResource)
reader:XmlBeanDefinitionReader-->reader:XmlBeanDefinitionReader:通过encodedResource获取inputStream
reader:XmlBeanDefinitionReader-->reader:XmlBeanDefinitionReader:doLoadBeanDefinitions(inputSource, encodedResource.getResource())\nreturn loadBeanDefinitionNum(加载数量):int
reader:XmlBeanDefinitionReader-->XmlBeanFactory:loadBeanDefinitionNum(加载数量)

3.bean标签的解析及注册时序图

title:bean标签的解析及注册时序图
DefaultBeanDefinitionDocumentReader-->DefaultBeanDefinitionDocumentReader:processBeanDefinition(ele, delegate)
DefaultBeanDefinitionDocumentReader->BeanDefinitionParserDelegate:delegate.parseBeanDefinitionElement(ele)
BeanDefinitionParserDelegate-->DefaultBeanDefinitionDocumentReader:bdHolder:BeanDefinitionHolder
DefaultBeanDefinitionDocumentReader->BeanDefinitionParserDelegate:delegate.decorateBeanDefinitionIfRequired(ele, bdHolder)
BeanDefinitionParserDelegate-->DefaultBeanDefinitionDocumentReader:bdHolder:BeanDefinitionHolder
DefaultBeanDefinitionDocumentReader->BeanDefinitionReaderUtils:BeanDefinitionReaderUtils.registerBeanDefinition(bdHolder, getReaderContext().getRegistry())
DefaultBeanDefinitionDocumentReader->XmlReaderContext:getReaderContext().fireComponentRegistered(new BeanComponentDefinition(bdHolder))

猜你喜欢

转载自blog.csdn.net/cs373616511/article/details/107666901