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