學習Spring原始碼篇之環境搭建

神祕傑克發表於2022-03-19

本文是學習 Spring 原始碼的第一篇,下載 Spring 原始碼及編譯執行並測試。

環境準備

JDK11、Gradle、Maven、SpringFramework 5.2.0.RELEASE

下載原始碼及編譯

進入 github :https://github.com/spring-pro...

在 Tags 中選擇需要的版本,隨後右側下載即可。

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 原始碼的下載編譯及測試。

相關文章