Spring導(dǎo)入到Idea環(huán)境
前言
Spring 是一個(gè)開(kāi)源的輕量級(jí)的 Java 開(kāi)發(fā)框架, 具有控制反轉(zhuǎn)(IoC)和面向切面(AOP)兩大核心。Spring 是目前開(kāi)發(fā)人員必須掌握的一項(xiàng)技能,因此,我們不僅要會(huì)用它,更要深入了解其原理。
《論語(yǔ)·魏靈公》:“工欲善其事,必先利其器。居是邦也,事其大夫之賢者,友其士之仁者?!?/p>
準(zhǔn)備
一、Spring源碼下載
由于 Github 無(wú)法訪問(wèn),可以從碼云 Gitee 上克隆一份項(xiàng)目。
SpringFramework碼云源碼地址
二、IDEA 下載
我自己用的 IDEA2021 版,我本來(lái)用的是 2019 版的,但是將 Spring 源碼導(dǎo)入到 IDEA 時(shí),出現(xiàn)了很多問(wèn)題,不得已重新下載了 IDEA2021 版的。具體什么問(wèn)題,后文會(huì)具體講解。
三、導(dǎo)入到 IDEA
其實(shí)在官方文檔里面已經(jīng)講了該如何將 Spring 導(dǎo)入到 IDEA 中,官方描述如下:
- Precompile spring-oxm with ./gradlew :spring-oxm:compileTestJava
- Import into IntelliJ (File -> New -> Project from Existing Sources -> Navigate to directory -> Select build.gradle)
- When prompted exclude the spring-aspects module (or after the import via File-> Project Structure -> Modules)
- Code away
- 預(yù)編譯。切換到Spring源碼目錄下,執(zhí)行Gradle命令
gradlew :spring-oxm:compileTestJava
-
在Spring項(xiàng)目目錄下有個(gè).Gradle文件,去下載對(duì)應(yīng)版本的Gradle
image - 為 Gradle 配置國(guó)內(nèi)鏡像
進(jìn)入 Gradle 安裝目錄,在 init.d 目錄下新建一個(gè) init.gradle 文件,并添加如下內(nèi)容:
allprojects{
repositories {
def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/'
all { ArtifactRepository repo ->
def url = repo.url.toString()
if ((repo instanceof MavenArtifactRepository) && (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com'))) {
project.logger.lifecycle 'Repository ${repo.url} replaced by $REPOSITORY_URL .'
remove repo
}
}
maven {
url REPOSITORY_URL
}
}
}
- 將 Spring 導(dǎo)入到 IDEA中
new->project from existsing sources 選中 build.gradle文件。
[站外圖片上傳中...(image-bcb28c-1619017304274)]
四、新建demo單元測(cè)試
- 新建一個(gè)實(shí)體類Person
package com.demo.spring.com.demo.vo;
public class Person {
private String name;
private String id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
- 配置xml文件
<?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="person" class="com.demo.spring.com.demo.vo.Person">
<property name="id" value="111"></property>
<property name="name" value="小明"></property>
</bean>
</beans>
- 添加測(cè)試類
public class IocTest {
@Test
public void test1(){
System.out.println("11");
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/springdemo.xml");
Person person = (Person) applicationContext.getBean("person");
System.out.println(person.getName());
}
}
-
最終執(zhí)行成功
image
五、要解決的問(wèn)題
-
aspectJ 的問(wèn)題。
Spring 引入了切面編程,所以需要下載安裝 aspectJ。具體安裝過(guò)程以及環(huán)境變量的配置較為簡(jiǎn)單,可自行百度,筆者不再贅述。安裝完成之后,需要更改 IDEA 的編譯器配置并且添加Facets指定對(duì)應(yīng)項(xiàng)目,如下:
image.png Kotlin版本問(wèn)題。
由于我下載的Spring源碼是主干的,部分Kotlin語(yǔ)法需要Kotlin 1.3.5版本以上才能支持,但是我最開(kāi)始用的 IDEA2019的Kotlin版本太低,所以項(xiàng)目構(gòu)建時(shí)報(bào)錯(cuò)。我本想在 IDEA 插件里面直接升級(jí)的,但因?yàn)榫W(wǎng)絡(luò)原因無(wú)法升級(jí),所以無(wú)奈將 IDEA 升級(jí)為 2021 版本。-
JDK 版本問(wèn)題。由于我下載的是SPring主干代碼,里面有部分代碼需要JDK11以上才能支持,因此需要替換升級(jí) Jdk11。這里需要注意的是,升級(jí) Jd k之后還要更改 IDEA 的配置,不然構(gòu)建的時(shí)候還是會(huì)報(bào)錯(cuò)。如下圖所示:
image.png


總結(jié)
這次將 Spring 源碼導(dǎo)入到 IDEA 中足足花了我?guī)滋斓臅r(shí)間才搞好,期間遇到各種各樣的問(wèn)題,上網(wǎng)各種搜索也找不到答案,幾度曾想中途放棄。但好在最后堅(jiān)持做完了。這也說(shuō)明了目前自己的動(dòng)手能力還比較弱,以后還能努力增強(qiáng)自己在這方面的能力。



