一、为什么要学习Spring源码
- 学习大神优秀的思想和代码风格
- 面试专业吹牛逼的法宝
- 写出更加优秀的代码
二、怎样学习源码
- java基础需要过硬
- 跟着demo跟代码
- 记录每个知识点,方便以后查阅和修正
- 注释关键点代码
- 有规律的复习
- 反复Do Exercise(不断练习)->Learning(由浅到深,由窄到宽)->Trying(尝试自己去实现)->Teaching(把自己理解的讲给别人听,查漏补缺,互相进步)
三、搭建Spring-Demo项目
1.前期准备
- JDK8
- Spring5.2.8Release
- Idea
- Maven
2.pom依赖导入
最最核心的spring依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
当然还需要其他的辅助,比如测试、日志
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.2</version>
</dependency>
3.spring.xml
Spring核心配置文件
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd"
default-lazy-init="false">
<!--自定义标签-->
<context:component-scan base-package="com.enjoy.jack" />
<context:property-placeholder location="classpath:application.properties"/>
其中最重要namespace为
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
四、Spring容器加载方式
- 类路径获取配置文件
ApplicationContext applicationContext= new ClassPathXmlApplicationContext("spring.xml");
- 文件系统路径获取配置文件【绝对路径】
ApplicationContext applicationContext = new FileSystemXmlApplicationContext("E:\com\public\springdemo\src\main\resources\spring.xml");
- 无配置文件加载容器
ApplicationContext applicationContext = new AnnotationConfigApplicationContext("com.xx.jack");
- Springboot加载容器
ApplicationContext applicationContext = new EmbeddedWebApplicationContext();
后续Spring源码跟进,我主要以ClassPathXmlApplicationContext的方式。