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