Spring源码深度解析大纲知识点
搭建Spring环境
1、下载github—64bit
https://desktop.github.com/
clone不了Spring源码,改为git客户端然后clone
2、安装gradle
http://gradle.org/downloads
gradle与maven起相同的作用,只是gradle是一个基于groovy的构建工具。
2.1创建目录
2.2将系统变量添加到path中
2.3打开cmd,输入gradle -v
由于我使用的gradle版本比较高,需要jdk8才可以使用
修改JAVA_HOME的环境变量
3、clone后的源码
4、导入Idea
这段时间会比较长。为什么呢?因为需要用gradle管理spring-framework框架的依赖的jar包。所以Idea下面会有进度条。
那么再这段时间再来回顾下这些模块都是干什么的?
Core technologies: dependency injection, events, resources, i18n, validation, data binding, type conversion, SpEL, AOP.
核心技术:依赖注入,事件,资源,i18n,验证,数据绑定,类型转换,SpEL,AOP。
Testing: mock objects, TestContext framework, Spring MVC Test, WebTestClient.
测试:模拟对象,TestContext框架,Spring MVC测试,WebTestClient。
Data Access: transactions, DAO support, JDBC, ORM, Marshalling XML.
数据访问:事务,DAO支持,JDBC,ORM,编组XML。
Spring MVC and Spring WebFlux web frameworks.
Spring MVC和 Spring WebFlux Web框架。
Integration: remoting, JMS, JCA, JMX, email, tasks, scheduling, cache.
集成:远程处理,JMS,JCA,JMX,电子邮件,任务,调度,缓存。
Languages: Kotlin, Groovy, dynamic languages.
语言:Kotlin,Groovy,动态语言。
核心类介绍(重点学习对象)
1.DefaultListableBeanFactory
xmlBeanFactory继承自DefaultListableBeanFactory,而DefaultListableBeanFactory是整个bean加载的核心部分,是spring注册以及加载bean的默认实现。而对于XmlBeanFactory与DefaultListableBeanFactory.不同的地方其实是在XmlBeanFactory中使用了自定义XML读取器XmlBeanDefinitionReader,实现个性化的BeanDefineitionReader读取,DefaultListableFactory继承了abstractAutowireCapableBeanFactory并实现了ConfigurableListableBeanFactory以及BeanDefinitionRegistry接口。
2、XmlBeanDefinitionReader
ResourceLoader:定义资源加载器,主要用于根据给定的资源文件地址返回对应的resource。
BeanDefinitionReader:主要定义资源文件读取并转换为BeanDefinition的各个功能。
EnvironmentCapable:定义获取Environment方法。
DoucumentLoader:定义从资源文件加载到转换为Document的功能。
AbstractBeanDefinitionReader:对于EnvironmentCapable和BeanDefinitionReader类定义的功能实现。
BeanDefinitionDocumentReader:定义读取Document并注册BeanDefinition功能。
BeanDefinitionParseDelegate:定义解析Element的各种方法。
看着这个图我们可以知道他的原理过程:
XmlBeanDefinitionReader通过继承abstractbeandefinitionReader中的方法,来使用ResourceLoader将资源文件转化为resource,然后通过documentLoader对resource文件进行转换,将resource文件转换为document文件。
通过实现BeanDefinitionDocumentReader的DefaultBeanDefinitionDocumetnReader类对Document进行解析,并使用BeanDefinitionParseDelegate对Element进行解析。