# [一] Spring 源码学习简介
内容概述
Spring源码系列是对Jack
老师上课内容的笔记整理,其中包括上课笔记以及对视频内容的流程整理,对照视频跟进代码添加注释,过程虽然繁琐,但是一定会有收获,感谢期间遇到问题Jack
老师耐心的解答。
- 在此引用
Jack
老师的话:没毛病吧,老铁,开始写笔记了。
知识点
Jack
老师在视频里重点强调的部分会以知识点
的方式总结出来。Spring
相关流程图和扩展内容会以附: XXX
文件单独整理。
# [1] 为什么要学Spring 源码
- 提升自己的写代码能力
- 从全局考虑如何使代码变得灵活和可扩展
# [2] 如何学习Spring 源码
- spring重新定义了JAVA
- spring源码是有一定难度的
- 如果想成为真正的高手,spring源码必须要攻克,不是危言耸听的
- 在学习期间,不管有多忙,课后一定要按照老师的讲解思路去理解课堂上讲解的内容
- 遇到不理解的一定要问,要反复去琢磨
- spring源码这块,进大厂是必问的环节
# [3] Spring的历史
- 2002年10月,Rod Johnson发布《Expert One-on-One J2EE设计和开发》一书
- 2004年03月,Spring1.0发布
- 2006年10月,Spring2.0发布
- 2009年12月,Spring3.0发布
- 2013年12月,Spring4.0发布
- 2017年09月,Spring5.0发布
# [4] 准备工作
- JDK1.8版本
- spring 5.1.3.RELEASE最新版本
- 补一下Lambda表达式的知识
- Spring源码下载
git clone --branch v5.1.3.RELEASE https://gitee.com/Z201/spring-framework.git
- 安装配置gradle,gradle需要支持JDK8的版本
- 到下载的spring源码路径执行gradle命令
gradlew :spring-oxm:compileTestJava
- 用idea打开spring源码工程,在idea中安装插件kotlin,重启Idea
- 把编译好的源码导入到工程中
# [5] 搭建Spring 项目
导入jar依赖,Spring中最核心的4个jar:
- spring-beans
- spring-core
- spring-context
- spring-expression
一个最最简单的spring工程,理论上就只需要一个jar就够了
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
# [6] 开启 Spring 日志
一个空的spring工程是不能打印日志的,要导入spring依赖的日志jar
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>LATEST</version>
</dependency>
# [7] Spring中XSD引入
Spring中要引入自定义标签,必须要引入其对应的XSD文件。如:<context:component-scan base-package="com.xx.jack"/>标签,必须要引入:
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
在标签对应的jar包下面找到对应的Spring.schemas
,在这个文件中就会有对应的XSD路径和命名空间。
# [8] Spring容器加载方式
类路径获取配置文件
- ApplicationContext applicationContext= new ClassPathXmlApplicationContext("spring.xml");
文件系统路径获取配置文件【绝对路径】
- ApplicationContext applicationContext = new FileSystemXmlApplicationContext("E:\idea\public\springdemo\src\main\resources\spring.xml");
无配置文件加载容器
- ApplicationContext applicationContext = new AnnotationConfigApplicationContext("com.xx.jack");
Springboot加载容器
- ApplicationContext applicationContext = new EmbeddedWebApplicationContext();