Spring 源码学习 思维导图
2022-02-28 09:19:46 0 举报
AI智能生成
通过思维导图 记录Spring框架 容器初始化,扫描bean,加载bean, IOC等知识。
作者其他创作
大纲/内容
getInputStream获取到文件流就可以进行各种操作了
上层类InputStreamSource
exists
isFile
isOpen
isReadable
getFile
getURI
方法
this.clazz.getResourceAsStream(this.path)
子类1 :ClassPathResource ,就是用来加载classPath路径下的资源的
Files.newInputStream():根据文件路径去加载
this.url.openConnection().getInputStream()
子类3:UrlResource
new ByteArrayResource(this.bytes)
ByteArrayResource
Resource(Spring里统一把所有资源抽象)
Spring中每个bean的属性,方法,构造方法信息都会封装到BeanDefinition中,注册到容器中就是以这个数据结构
根据编码和字符集准备好资源,为下一步加载bean做准备
DocumentBuilderFactory-》DocumentBuilder->parse0>Document
BeansDtdResolver找spring-beans.dtd
PluggableSchemaResolver 加载META-INF/spring.schemas
EntityResolver 校验XML方式:DTD XSD
通过applicationContext.xml是否含有DOCTYPE字符串判断使用哪种解析器
registerBeanDefinitions,解析document,并注册bean到spring中去
放到GenericBeanDefinition
解析Spring标签BeanDefinitionParserDelegate.parseDefaultElement
XmlBeanDefinitionReader.loadBeanDefinitions(resource)
一个bean实现了感知接口,spring容器在实例化bean的时候就会调用感知接口的方法,将容器内部的对象注入到感知接口方法中,这些bean就可以拿到spring内部的对象,就可以做自定义功能改造
BeanNameAware
BeanFactoryAware
BeanClassLoaderAware
Aware感知接口
XmlBeanFactory初级容器
RootBeanDefinition
ChildBeanDefinition
@Bean
@Component
@Service
AnnotatedGenericBeanDefinition封装和注解相关的Bean
GenericBeanDefinition(2.5后推荐)
解析bean的各个子标签,封装到BeanDefinition
BeanDefinition(接口)
ConcurrentHashMap
注册别名alias
beanDefinitionMap
initPropertySource留给子类实现,处理一些占位符参数
在上下文环境中对环境变量进行校验
prepareRefresh初始化上下文
创建DefaultListableBeanFactory容器
loadBeanDefinitions 解析并加载xml文件的bean
obtainFreshBeanFactory
对spring容器beanFactory做一些初始化工作
添加SPLE语言的支持-setBeanExpressionResolver
InputStreamEditor
FileEditor
UrlEditor
当bean实例化需要设置属性值时,这些属性编辑器就会根据需要将字符串转换成响应对象,并为bean的这些属性赋值,完成bean的实例化
添加属性编辑器的注册器-ResourceEditorRegistrar
prepareBeanFactory
refresh步骤
前置处理器
后置处理器
ClassPathXmlApplicationContext
${}占位符
ApplicationContext高级容器
1 初始容器
分支主题
2 扫描bean
Subtopic
AOP
IOC
Spring
0 条评论
回复 删除
下一页