前言
一直以来对 Spring 源码的理解不够全面,也不成条理,只是对其中的某小部分比较了解,所以从今天开始要重新系统学习 Spring 的源码了。
搭建源码环境
首先需要说明的是,源码环境并不是必须的,搭建源码环境唯一的好处是可以在源码上写注释,加深理解,同时方便后续调试回顾
1、从 Github 获取代码
Spring 仓库地址:https://github.com/spring-projects/spring-framework
比较推荐通过压缩包的方式下载,我这里下载的是5.1.x
。
2、换源
在实践的过程中,发现有些依赖会导入失败,报了个Unauthorized
的异常,查了之后找到了解决方案,就是多加一些仓库就行了,具体原因可以参考下面的文章:
https://blog.csdn.net/adeyi/article/details/128605407
repositories {
maven { url "https://maven.aliyun.com/repository/central" }
maven { url "https://maven.aliyun.com/repository/google" }
maven { url "https://maven.aliyun.com/repository/gradle-plugin" }
maven { url "https://maven.aliyun.com/repository/jcenter" }
maven { url "https://maven.aliyun.com/repository/spring" }
maven { url "https://maven.aliyun.com/repository/spring-plugin" }
maven { url "https://maven.aliyun.com/repository/public" }
maven { url "https://maven.aliyun.com/repository/releases" }
maven { url "https://maven.aliyun.com/repository/snapshots" }
maven { url "https://maven.aliyun.com/repository/grails-core" }
maven { url "https://maven.aliyun.com/repository/mapr-public" }
maven { url "https://maven.aliyun.com/repository/apache-snapshots" }
gradlePluginPortal()
maven { url "https://repo.spring.io/plugins-release" }
}
3、构建项目
将项目导入 idea 等 IDE 中,会自动构建,也可以手动构建,如下图:
Spring 的核心
众所周知,Spring 有两大核心:IOC 和 AOP ,也就是控制反转
和面向切面编程
。
而控制反转是依靠工厂(容器)来实现的,为什么工厂又被称为容器呢?
因为,这些工厂不仅要创建对象,还要能够存取对象。
工厂总览
接下来看一些重要的工厂,首先是BeanFactory
,它是 Spring 体系的底层工厂,定义了工厂的基本操作。
它有一些子类:
- HierarchicalBeanFactory:父子容器的管理
- ConfigurableBeanFactory:可配置能力,比如 单、多实例
- ApplicationContext :整合了多个工厂的功能,是在编程中常使用的类型
- AutowireCapableBeanFactory:自动配置的能力
- ListableBeanFactory:获取相关配置信息
- XmlBeanFactory:基于 xml 配置的信息完成对象的创建
了解了这些之后,再加上之前的使用经验,就基本可以开始后面正式内容的学习了。