idea调试源代码c语言,IDEA阅读spring源码并调试
目標(biāo):搭建起Spring源碼閱讀和代碼調(diào)試跟蹤的環(huán)境,順便建立一個(gè)簡(jiǎn)單的Demo,能夠調(diào)試Spring的源代碼
本節(jié),主要介紹一下Spring源碼閱讀和調(diào)試的相關(guān)環(huán)境搭建,并使用MVN創(chuàng)建一個(gè)非常簡(jiǎn)單的Demo,以便可以跟蹤和調(diào)試Spring的內(nèi)核。
1、源碼的下載
Spring的源碼可以從GitHub上下載:https://github.com/spring-projects/spring-framework
2、Spring源碼的編譯
Spring源碼下載下來(lái)后,我這里比較習(xí)慣,先編譯出來(lái),而不是直接導(dǎo)入到相關(guān)的 IDE。大型的開(kāi)源項(xiàng)目都是借助于自動(dòng)化構(gòu)建工具實(shí)現(xiàn)編譯打包的,因此先編譯有個(gè)好處,就是編譯過(guò)程中,會(huì)自動(dòng)的下載相關(guān)的依賴(lài)。現(xiàn)在大部分項(xiàng)目編譯過(guò)程中出現(xiàn)的問(wèn)題,首先都?xì)w結(jié)到項(xiàng)目依賴(lài)的問(wèn)題。
①、編譯環(huán)境
A、操作系統(tǒng):我的源碼和相關(guān)開(kāi)發(fā)環(huán)境,都是在 mac 下的
B、JDK:安裝好JDK1.8
C、由于Spring源碼是采用Gradle這種自動(dòng)化構(gòu)建工具構(gòu)建的,因此需要安裝?Gradle ,安裝過(guò)程就不多說(shuō)了。
D、我使用的IDE是?IntelliJ?IDEA,因此,需要安裝?IntelliJ?IDEA 旗艦版,免費(fèi)30天
②、源碼編譯
在源碼編譯環(huán)境準(zhǔn)備好后,編譯源碼之前,請(qǐng)先仔細(xì)看一下 Spring源碼目錄下的?README.md、import-into-idea.md ?這兩個(gè)文件。?README.md中,告知了整個(gè)編譯過(guò)程和需要注意的地方。如果你使用Eclipse作為IDE的開(kāi)發(fā)工具,那直接運(yùn)行./import-into-eclipse.sh ?或者 ./import-into-eclipse.bat ,就可以把源碼導(dǎo)入到Eclipse中,如果使用IDEA作為開(kāi)發(fā)工具,那么需要認(rèn)真閱讀?import-into-idea.md,它告訴了你導(dǎo)入IDEA的步驟。
A、先進(jìn)入 …/spring-framework 目錄,執(zhí)行?./gradlew :spring-oxm:compileTestJava ?先對(duì) Spring-oxm 模塊進(jìn)行預(yù)編譯。
B、還是在 …/spring-framework 目錄 ,執(zhí)行 ./gradlew build -x test ?編譯,整個(gè)Spring的源碼。 后面的 -x test ?是編譯期間忽略測(cè)試用例,需要加上這個(gè),Spring的測(cè)試用例,有些是編譯不過(guò)的。編譯過(guò)程時(shí)間,會(huì)隨著網(wǎng)絡(luò)的暢通程度而不同。
③、源碼導(dǎo)入IDEA
編譯通過(guò)后,就可以把源碼導(dǎo)入到 IDEA中了
在IDEA中 File -> New -> Project from Existing Sources -> Navigate to directory ,選擇Spring源碼目錄,導(dǎo)入,然后IDEA會(huì)自動(dòng)的使用Gradle進(jìn)行構(gòu)建。構(gòu)建完成之后,需要做如下設(shè)置:
排除?spring-aspects ?項(xiàng)目,這個(gè)是Spring 的AOP體系集成了 aspects ,但在IDEA中無(wú)法編譯通過(guò),原因可以參見(jiàn):
http://youtrack.jetbrains.com/issue/IDEA-64446
選中??spring-aspects ?項(xiàng)目 右鍵,選擇“Load/Unload Moudules” 在彈出的窗體中進(jìn)行設(shè)置(如下圖所示):
3、簡(jiǎn)單的Demo的搭建
這里可以創(chuàng)建一個(gè)簡(jiǎn)單的Demo,該Demo依賴(lài)于Spring的源碼,這樣,就可以從外部,運(yùn)行Demo,跟蹤到Spring的內(nèi)部源碼了。為不失一般性,這里的Demo采用MVN進(jìn)行構(gòu)建,只不過(guò),相關(guān)的Spring的源碼依賴(lài)需要在IDEA中設(shè)置成本地源碼
①、使用IDEA 在Spring的源碼的Project目錄下,創(chuàng)建一個(gè)Demo,可以直接使用MVN的骨架
②、Demo的相關(guān)設(shè)置和簡(jiǎn)單的代碼測(cè)試
A、設(shè)置一下pom.xml 中的?junit 依賴(lài)版本,修改為 4.12 否則Spring的單元測(cè)試,編譯不通過(guò)
B、在IDEA設(shè)置Spring的項(xiàng)目依賴(lài)(設(shè)置Spring-core、Spring-beans、Spring-context、Spring-expression這幾個(gè)module就可以了):
C、pom.xml中需要引入commons-logging的依賴(lài),否則編譯報(bào)找不到LogginFactory的錯(cuò)誤.配置靜態(tài)資源路徑(否則讀取xml的時(shí)候,找不到路徑)
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.hxl
spring-debug
1.0-SNAPSHOT
spring-debug
http://www.example.com
UTF-8
1.8
1.8
junit
junit
4.12
test
commons-logging
commons-logging
1.2
src/main/resources
true
maven-clean-plugin
3.0.0
maven-resources-plugin
3.0.2
maven-compiler-plugin
3.7.0
maven-surefire-plugin
2.20.1
maven-jar-plugin
3.0.2
maven-install-plugin
2.5.2
maven-deploy-plugin
2.8.2
D、設(shè)置Spring的配置和編寫(xiě)簡(jiǎn)單的Spring代碼
創(chuàng)建一個(gè)簡(jiǎn)單的 登錄接口 ILogin:
public interface ILogin {
String loginCheck(String userName,String password);
}
它有個(gè)實(shí)現(xiàn)類(lèi):
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class LoginImpl implements ILogin {
String id = "";
@Autowired(required = false)
public void setId(String id) {
this.id = id;
}
@Override
public String loginCheck(String userName, String password) {
System.out.println("boy登錄...");
return "success";
}
}
然后,把該bean 注冊(cè)到配置中(路徑spring-debug/src/spring-config.xml):
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">
最后,編寫(xiě)調(diào)用的代碼:
import com.boy.login.ILogin;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
/**
* Hello world!
*/
public class App {
public static void main(String[] args) {
//ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring-config.xml");
String XMLPath = "//Users/sky/Java/spring-framework/spring-debug/src/spring-config.xml";
ApplicationContext applicationContext = new FileSystemXmlApplicationContext(XMLPath);
ILogin login = (ILogin) applicationContext.getBean("loginService");
login.loginCheck("boy", "123");
}
}
然后就可以 進(jìn)行Debug了,并且可以Debug到Spring源碼內(nèi)部。
原文:https://blog.csdn.net/u013310075/article/details/80707098
閱讀spring源碼
讀Spring源碼之前,你要先清楚,為什么你要用Spring... Spring最基本的功能是做為管理bean的容器,所以我以為應(yīng)該先從org.springframework.context包了解咯, ...
Spring源碼分析——調(diào)試環(huán)境搭建(可能是最省事的構(gòu)建方法)
1. 依賴(lài)工具 idea git jdk 1.8 + Gradle 2. 獲取源碼 從github https://github.com/spring-projects/spring-framewor ...
Spring源碼閱讀筆記
前言 作為一個(gè)Java開(kāi)發(fā)者,工作了幾年后,越發(fā)覺(jué)力有點(diǎn)不從心了,技術(shù)的世界實(shí)在是太過(guò)于遼闊了,接觸的東西越多,越感到前所未有的恐慌. 每天搗鼓這個(gè)搗鼓那個(gè),結(jié)果回過(guò)頭來(lái),才發(fā)現(xiàn)這個(gè)也不通,那個(gè)也不精 ...
Spring源碼閱讀學(xué)習(xí)一
昨天抽時(shí)間閱讀Spring源碼,先從spring 4.x的core包開(kāi)始吧,除了core和util里,首當(dāng)其沖的就是asm和cglib. 要實(shí)現(xiàn)兩個(gè)類(lèi)實(shí)例之間的字段的復(fù)制功能: 多年之前用C#,因?yàn)殚?...
Sping學(xué)習(xí)筆記(一)----Spring源碼閱讀環(huán)境的搭建
idea搭建spring源碼閱讀環(huán)境 安裝gradle Github下載Spring源碼 新建學(xué)習(xí)spring源碼的項(xiàng)目 idea搭建spring源碼閱讀環(huán)境 安裝gradle 在官網(wǎng)中下載gradl ...
Spring源碼閱讀筆記01:源碼閱讀環(huán)境準(zhǔn)備
1. 寫(xiě)在前面 對(duì)于做Java開(kāi)發(fā)的同學(xué)來(lái)說(shuō),Spring就像是一條繞不過(guò)去的路,但是大多數(shù)也只是停留在對(duì)Spring的簡(jiǎn)單使用層面上,對(duì)于其背后的原理所知不多也不愿深究,關(guān)于這個(gè)問(wèn)題,我在平時(shí)的生活 ...
【spring源碼分析】準(zhǔn)備工作
前言:之前寫(xiě)過(guò)兩篇基于xml形式的IOC容器初始化過(guò)程,現(xiàn)在看來(lái)寫(xiě)的比較爛,最近又繼續(xù)閱讀spring源碼,對(duì)IOC容器的初始化有了一些新的認(rèn)識(shí),因此決定記錄下來(lái),加深自己對(duì)spring的印象與理解. ...
如何閱讀Java源碼?
閱讀本文大概需要 3.6 分鐘. 閱讀Java源碼的前提條件: 1.技術(shù)基礎(chǔ) 在閱讀源碼之前,我們要有一定程度的技術(shù)基礎(chǔ)的支持. 假如你從來(lái)都沒(méi)有學(xué)過(guò)Java,也沒(méi)有其它編程語(yǔ)言的基礎(chǔ),上來(lái)就啃< ...
我該如何學(xué)習(xí)spring源碼以及解析bean定義的注冊(cè)
如何學(xué)習(xí)spring源碼 前言 本文屬于spring源碼解析的系列文章之一,文章主要是介紹如何學(xué)習(xí)spring的源碼,希望能夠最大限度的幫助到有需要的人.文章總體難度不大,但比較繁重,學(xué)習(xí)時(shí)一定要耐住 ...
隨機(jī)推薦
CBC和CTR解密模式——C++實(shí)現(xiàn)
利用已經(jīng)封裝好的AES加密算法,實(shí)現(xiàn)CBC模式加密和CTR模式加密. (1)CBC解密 如圖,CBC模式的解密,步驟主要有三個(gè),首先是拿密文段逐一放到AES解密盒子里面得到一個(gè)結(jié)果temp(事先要把密 ...
RAID卡
簡(jiǎn)單的說(shuō),RAID是一種把多塊獨(dú)立的物理硬盤(pán)按不同方式組合起來(lái)形成一個(gè)邏輯硬盤(pán),從而提供比單個(gè)硬盤(pán)有著更高的性能和提供數(shù)據(jù)冗余的技術(shù). ? ? RAID卡一般分為硬RAID卡和軟RAID卡兩種 ...
小技巧:SystemTray中進(jìn)行操作提示
SystemTray中進(jìn)行操作提示在wp中應(yīng)用比較廣泛,截圖如下. 實(shí)現(xiàn)方法也十分簡(jiǎn)單 1.xaml代碼中寫(xiě)入: shell:SystemTray.IsVisible="True" ...
Android基礎(chǔ)夯實(shí)--你了解Handler有多少?
概述 對(duì)于剛?cè)腴T(mén)的同學(xué)來(lái)說(shuō),往往都會(huì)對(duì)Handler比較迷茫,到底Handler是個(gè)什么樣的東西.當(dāng)然,可能對(duì)于一些有工作經(jīng)驗(yàn)的工程師來(lái)說(shuō),他們也不一定能很準(zhǔn)確地描述,我們來(lái)看下API的介紹. Han ...
SQLServer之刪除視圖
刪除視圖注意事項(xiàng) 刪除視圖時(shí),將從系統(tǒng)目錄中刪除視圖的定義和有關(guān)視圖的其他信息.?還將刪除視圖的所有權(quán)限. 使用 DROP TABLE 刪除的表上的任何視圖都必須使用 DROP VIEW 顯式刪除. ...
手工脫殼之FSG壓縮殼-IAT表修復(fù)
目錄 一.工具及殼介紹 二.脫殼 2.1.單步跟蹤脫殼 2.2.IAT修復(fù) 三.程序脫殼后運(yùn)行截圖 四.個(gè)人總結(jié) 五.附件 一.工具及殼介紹 使用工具:Ollydbg.PEID.ImportREC.L ...
項(xiàng)目Alpha沖刺4
作業(yè)描述 課程: 軟件工程1916|W(福州大學(xué)) 作業(yè)要求: 項(xiàng)目Alpha沖刺(團(tuán)隊(duì)) 團(tuán)隊(duì)名稱(chēng): 火雞堂 作業(yè)目標(biāo): 介紹第四天沖刺的項(xiàng)目進(jìn)展.問(wèn)題困難和心得體會(huì) 1.團(tuán)隊(duì)信息 隊(duì)名:火雞堂 隊(duì) ...
RedisTemplate 分頁(yè)
利用spring redis的RedisTemplate進(jìn)行分頁(yè): 場(chǎng)景: 現(xiàn)有項(xiàng)目若干,根據(jù)項(xiàng)目的創(chuàng)建時(shí)間(createTime)進(jìn)行降序讀取: 存儲(chǔ)結(jié)構(gòu): key:proList(list) 存放 ...
小米路由器刷Xiaomi Mi WiFi Mini openwrt
Current Stable Release - OpenWrt 18.06.1,released on August, 18th 2018. there is also?PandoraBox?fir ...
JAVA類(lèi)課后練習(xí)
1.Pg168--2 package com.hanqi; import java.util.Scanner; public class Rectangle { Rectangle() { //完成初 ...
總結(jié)
以上是生活随笔為你收集整理的idea调试源代码c语言,IDEA阅读spring源码并调试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 苹果或将采用高通屏下指纹方案,5GiPh
- 下一篇: 现代公关无需遮遮掩掩,明火执仗开干就行