天天看點

idea導入spring源碼idea 導入spring源碼

idea 導入spring源碼

學習spring源碼最好的方法就是運作源碼然後在源碼基礎上進行debug學習, 現在就總結一下spring源碼怎麼導入到idea中, 網上很多教程說需要安裝gradle,其實gradle是不需要本地安裝的, 本地安裝隻是為了提高建構速度。

  1. 下載下傳源碼,直接通過spring官網找到源碼,然後通過git導入idea.

    spring源碼git位址: https://github.com/spring-projects/spring-framework

    idea導入spring源碼idea 導入spring源碼
  2. 添加阿裡的maven倉庫,然後編譯源碼

    這裡有兩個檔案需要修改,一個是根目錄下的build.gradle檔案,還有一個是buildSrc裡的build.gradle

repositories {
	maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
	maven{ url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
	mavenCentral()
	gradlePluginPortal()
}
           
idea導入spring源碼idea 導入spring源碼
idea導入spring源碼idea 導入spring源碼

3. 修改完以在建構spring這樣速度會快很多。加載完以後新增一個自己的子產品。

idea導入spring源碼idea 導入spring源碼

4. 執行

spring-oxm

中的

compileTestJava

idea導入spring源碼idea 導入spring源碼

4. 引入context子產品

idea導入spring源碼idea 導入spring源碼

5. 測試檔案

@Configurable
@ComponentScan("com.yousuf")
public class AppConfig {
}
           
@Component
public class Clazz {
	@Autowired
	private Student student;
	public Clazz() {
		System.out.println("-----init clazz-----");
	}
}
           
@Component
public class Student {
	@Autowired
	private Clazz clazz;
	public Student() {
		System.out.println("-------init student-------");
	}
}
           
// 這個是測試類
public class ApplicationTest {
	@Test
	void app_test() {
		AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
		System.out.println(ctx.getBean(Clazz.class));
		System.out.println(ctx.getBean(Student.class));
	}
}
           

報錯資訊

idea導入spring源碼idea 導入spring源碼

build報錯子產品繼續執行,報錯資訊,這個時候需要引入報錯的子產品

kotlin-coroutines

idea導入spring源碼idea 導入spring源碼
idea導入spring源碼idea 導入spring源碼

繼續看報錯資訊, 找到該子產品并引入

idea導入spring源碼idea 導入spring源碼

項目終于全部跑通了

idea導入spring源碼idea 導入spring源碼

這裡隻是介紹了一下怎麼排除錯誤,錯誤不可能全部重制,解決錯誤的思路就是看哪個包的東西缺失就引入哪個包,其實我們可以參考其他包來進行引入,比如我們看一下

spring-web

build.gradle

檔案,參照着他的包引入,則基本不會報錯

idea導入spring源碼idea 導入spring源碼

參考他的修改我們的gradle檔案

idea導入spring源碼idea 導入spring源碼

這裡你就會發現其實和我們平時引用spring沒什麼差別,最關鍵的包

spring-core

spring-context

包,隻是之前導入的是jar包,現在導入的是子產品,我們需要測試哪個功能引入對應的子產品即可,最最核心的spring子產品就是這兩個。是以源碼導入和jar包使用沒什麼差別。