一、为什么要学习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核心配置文件
其中最重要namespace为<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"/>
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的方式。