本文是學習 Spring 原始碼的第一篇,下載 Spring 原始碼及編譯執行並測試。
環境準備
JDK11、Gradle、Maven、SpringFramework 5.2.0.RELEASE
下載原始碼及編譯
進入 github :https://github.com/spring-pro...
在 Tags 中選擇需要的版本,隨後右側下載即可。
下載完成解壓後,進入spring-framework-5.2.0.RELEASE
檔案中,通過終端執行以下命令:
./gradlew :spring-oxm:compileTestJava
如果下載過慢可以使用阿里雲映象。
隨後通過 IDEA 匯入專案,gradle 會自動編譯。
在編譯中可能會報如下錯誤:
POM relocation to an other version number is not fully supported in Gradle : xml-apis:xml-apis:2.0.2 relocated to xml-apis:xml-apis:1.0.b2.
修改引入方式,修改 bulid.gradle,搜尋 configurations.all,新增如下內容:
force 'xml-apis:xml-apis:1.4.01'
configurations.all { resolutionStrategy { cacheChangingModulesFor 0, "seconds" cacheDynamicVersionsFor 0, "seconds" force 'xml-apis:xml-apis:1.4.01' } }
隨後我們排除掉spring-aspects
模組,右鍵該模組選擇 Load/UnLoad Modules...
即可。
測試
我們新建一個 gradle 模組專案 springdemo 進行測試。目錄結構如下:
build.gradle 加入依賴,這裡只加入 context 是因為 context 中已經引入了 code、aop、beans 等核心模組。
dependencies {
compile(project(":spring-context"))
testCompile group: 'junit', name: 'junit', version: '4.12'
}
先建立一個介面和實現類。
public interface WelcomeService {
String sayHello(String name);
}
@Service
public class WelcomeServiceImpl implements WelcomeService {
@Override
public String sayHello(String name) {
System.out.println("歡迎你:" + name);
return "success";
}
}
建立 spring 的配置檔案,然後註冊 bean。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="welcomeService" class="cn.jack.service.impl.WelcomeServiceImpl"/>
</beans>
最後我們建立啟動類進行測試。
/**
* @author 神祕傑克
* 公眾號: Java菜鳥程式設計師
* @date 2022/3/14
* @Description 啟動類
*/
public class Entrance {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring/spring-config.xml");
WelcomeService welcomeService = (WelcomeService) applicationContext.getBean("welcomeService");
welcomeService.sayHello("Spring框架!");
}
}
執行結果:
> Task :springdemo:Entrance.main()
歡迎你:Spring框架!
BUILD SUCCESSFUL in 9s
OK,到這裡就完成了 Spring 原始碼的下載編譯及測試。