SpringIOC的理解
2020-02-24 20:18:24 3 举报
Spring IOC的执行过程,自己理解的,可能会有错误,画图的方式也不是很规范
作者其他创作
大纲/内容
通过类加载器获取输入流
创建GenericBeanDefinition
车身
首先判断beanDefinitionMap中是否存在
processBeanDefinition
XmlBeanDefitionReader: getValidationModeForResource (Resource)
为什么要把资源使用Resource封装起来?是因为在java中,通常把不同来源的资源抽象成一个URL,通过注册不同的URLStreamHandler处理不同的资源的读取逻辑,一般handler的类型使用不同的前缀,比如\"http\"、\"https\"、\"file\",但是URL没有默认的classpath前缀,所以spring自己将内部使用到的资源抽象成了Resource
this.parseState.pop();
创建BeanDefinitionHolder
依赖
createReaderContext创建了ReaderContext
否
XmlBeanFactory:ctor
这里的注册有多个实现,看DefaultListableBeanFactory的实现
注册BeanDefinitions
这里的Resource是为了确定XML的验证模式
doc.getDocumentElement()
改造成
Resource以及SAX中的Inputsource
解析BeanDefinitions
解析的element都是通过之前的doc对象获取的
如果出现了下面这种情况的话<bean id=\"xxx\" class=\"xxx\"><custombeantag:user username=\"xxx\"/></bean>就要装饰Bean
这里的bdHolder是刚才装饰过的(如果是默认的标签的话就不会装饰)这个Registry是通过刚才创建的ReaderContext获取的Registry由这里可以看见,是将beanName和BeanDefinition注册到BeanDifinitionMap中去
解析BeanDefinition元素
doRegisterBeanDefinitions
轮胎
解析完成之后将解析状态解除
XML配置文件
parseBeanDefinitionAttributes将元素标签的值都存储在GenericBeanDefinition中
将BeanDefinitionHolder传入
XmlBeanDefinitionReader: LoadBeanDefinitions(EncodedResource)
汽车
首先先封装Resource,因为考虑到Resource存在编码的情况
调用LoadDocument方法原理就是SAX解析XML文档的方法
底盘
DocumentReader
EncodedResource
Resource
Document对象 doc
decorateBeanDefinitionIfRequired
将beanName和BeanDefinition放进beanDefinitionMap
之前的Resource对象
解码
用于承载BeanDefinition其实现了BeanDefinition接口
XmlBeanDefinitionReader: LoadBeanDefinitions(Resource)

收藏

收藏
0 条评论
下一页