记录一下自己对spring源码的阅读理解(一)
这是本人第一次记博客,平时都是记录在映像笔记中,发现印象不够深刻,模糊的始终是模糊的,打算用博客的方式鞭策自己,也希望一直能坚持下去,
Spring编译环境搭建
spring采用gradle进行编译的,和maven异曲同工,下面讲解一下spring源码阅读的环境搭建:
- 去github上搜索spring-framework进行对应版本下载,笔者下载的是5.2版本
https://github.com/spring-projects/spring-framework
- 下载gradle 下载地址
https://services.gradle.org/distributions/
- 配置gradle环境变量
GRADLE_HOME D:\gradle-6.8.3-bin\gradle-6.8.3
path %GRADLE_HOME%\bin
- 测试是否安装成功
gradle -version
- gradle文件讲解
build.gradle 放一些依赖配置,有点像maven的pom文件
gradle.properites 存放当前Spring的版本,可以对比下看看是不是5.0.x版本
gradlew.bat 放的是项目的构建脚本,不过在本章用不上,本章是使用idea去构建
import-into-idea.md 这个是spring导入idea的说明文件,可以根据里面的步骤去导入
- 前置设置,否则无法正常编译
1.注释掉dokka和asciidoctor两个配置项
2.替换docs.gradle文件中的task schemaZip配置
3.在build.gradle文件配置阿里云镜像
task schemaZip(type: Zip) {
group = "Distribution"
baseName="spring-framework"
classifier="schema"
description = "Builds -${classifier} archive containing all " +
"XSDs for deployment at https://springframework.org/schema."
duplicatesStrategy 'exclude'
moduleProjects.each { subproject ->
def Properties schemas = new Properties();
subproject.sourceSets.main.resources.find{
it.path.endsWith("META-INF/spring.schemas")
}?.withInputStream { schemas.load(it) }
for (def key : schemas.keySet()) {
def shortName = key.replaceAll(/http.*schema.(.*).spring-.*/, '$1')
assert shortName != key
File xsdFile = module.sourceSets.main.resources.find {
it.path.endsWith(schemas.get(key).replaceAll('\\/','\\\\'))
}
assert xsdFile != null
into (shortName) {
from xsdFile.path
}
}
}
}
allprojects {
repositories {
maven { url 'https://maven.aliyun.com/repository/public/' }
mavenLocal()
mavenCentral()
}
}
- 添加一个自己的模块,修改build.gradle
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
compile(project(":spring-context")) //重点,导入本地spring-context
}
- 编写一个配置文件
<?xml version="1.0" encoding="UTF-8"?>
<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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="cn.sm.beans"></context:component-scan> //使用xml的方式装配bean
</beans>
- 编写测试类
ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext("classpath:spring.xml");
System.out.println(ioc.getBean("car"));
- 注:第一次使用可能会存在乱码问题
idea设置 Settings–>Editor—>File Encodings—设置成utf-8
jvm参数设置 -Dfile.encoding=UTF-8
配置好重启下idea集合
- 测试是否能从容器中获取bean
到此环境已经搭建完,有不对的地方欢迎指出