Spring源碼(一) 如何閱讀 Spring 源碼

學習 Spring 的源碼,也可以通過 SpringBoot 搭環境。

不管是什么源碼,最好寫個 demo,跑起來,然后從常用的類和方法入手,跟蹤調試。

配置對象

新建一個 SpringBoot 的項目, 詳情見: https://blog.csdn.net/sinat_32502451/article/details/133039001

接著在 com.example.demo.model 路徑建一個類 Person,屬性包括 name和 age (也可以是其它的路徑,與以下的class路徑一致就行) 。

public class Person {private int age;private String name;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}    

然后在 resources 文件夾下,添加一個 mySpring.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.example.demo.model.Person"><property name="name" value="Tom"/><property name="age" value="1"/></bean></beans>

查看配置的對象值:

創建一個類,查看 xml 配置的對象的值:

public class MySpring {public static void main(String[] args) {//可以在以下這段代碼打個斷點,跟蹤調試ApplicationContext context =new ClassPathXmlApplicationContext("classpath*:mySpring.xml");Person person = context.getBean("person", Person.class);System.out.println("=======>"+ person.getName());}}

在 ApplicationContext 開頭的這段代碼,打個斷點, 然后 跟蹤調試。

ClassPathXmlApplicationContext

從 xml 加載定義的 bean 對象,并且會通過 refresh 刷新 context 上下文 。

	/*** Create a new ClassPathXmlApplicationContext with the given parent,* loading the definitions from the given XML files.* @param configLocations array of resource locations* @param refresh whether to automatically refresh the context,* loading all bean definitions and creating all singletons.* Alternatively, call refresh manually after further configuring the context.* @param parent the parent context* @throws BeansException if context creation failed* @see #refresh()*/public ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, @Nullable ApplicationContext parent)throws BeansException {super(parent);//設置配置文件的路徑setConfigLocations(configLocations);if (refresh) {//refresh()方法,負責初始化 ApplicationContext 容器。可以重點看看。refresh();}}

調試方法:

可以通過 Step Into 進入方法,也就是 Intellij Idea 的 F7 快捷鍵,繼續跟蹤。

Step Over ,也就是 Intellij Idea 的 F8 快捷鍵,單步調試,逐行調試。

遇到調用接口,如果不清楚是哪個接口實現類,可以直接在 Intellij Idea 的 接口上打斷點,調試時會自動跳轉到對應的接口實現類。

調試過程中,遇到不懂的,也可以百度搜索下。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/40329.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40329.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/40329.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

FreeRTOS 中 vListInsertEnd 函數詳解

在 FreeRTOS 中&#xff0c;vListInsertEnd 函數用于將新項插入到指定列表的尾部&#xff08;但實際行為是插入到一個特定的索引位置之前&#xff09;。FreeRTOS 使用雙向鏈表&#xff08;doubly linked list&#xff09;來管理任務和其他系統對象&#xff0c;這樣可以高效地插…

前端三件套開發模版——產品介紹頁面

今天有空&#xff0c;使用前端三件套html、css、js制作了一個非常簡單的產品制作頁面&#xff0c;與大家分享&#xff0c;希望可以滿足大家應急的需求。本頁面可以對產品進行“搶購”、對產品進行介紹&#xff0c;同時可以安排一張產品的高清大圖&#xff0c;我也加入了頁面的背…

JAVA實現二分查找,斐波那契數列,深度優先搜索詳情教程【包含代碼】

本人詳解 作者:王文峰,參加過 CSDN 2020年度博客之星,《Java王大師王天師》 公眾號:JAVA開發王大師,專注于天道酬勤的 Java 開發問題中國國學、傳統文化和代碼愛好者的程序人生,期待你的關注和支持!本人外號:神秘小峯 山峯 轉載說明:務必注明來源(注明:作者:王文峰…

react+ts+antd項目搭建

前言&#xff1a; 基于ts語言創建react項目&#xff0c;node版本是v16.14.2 一、 腳手架創建項目 全局安裝 npm install -g creacte-react-app創建項目file-management&#xff0c;ts需要添加–template typescript npx create-react-app file-management --template typesc…

Ubuntu查看opencv版本c++

?命令行中直接輸入&#xff1a; pkg-config --modversion opencv?命令行中直接輸入&#xff1a; pkg-config --modversion opencv4注解&#xff1a;附上在markdown中打勾&#xff0c;對號和打叉。使用時將&和#之間的空格去掉&#xff0c;這里只是為了不讓CSDN自動轉換才…

Ubuntu20.04 c++程序 涉及opencv問題記錄

頭文件更改 默認的頭文件引用是 #include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp>但是在ubuntu20中/usr/include中默認的是opencv4&#xff0c;他文件夾里面才是opencv2&#xff0c;需要…

vue3單個頁面進行防抖節流

防抖 <template><button id"submitButton" ref"submitButton">GET</button> </template><script lang"ts" setup> import { ref, onMounted } from vue;// 防抖函數 function debounce(func: () > void, dela…

【mybatis】mybatis-plus中Wrapper(查詢條件構造器)簡介_常用方法

1、簡介 MyBatis-Plus 是一個 MyBatis 的增強工具&#xff0c;在 MyBatis 的基礎上只做增強不做改變&#xff0c;為簡化開發、提高效率而生。MyBatis-Plus 提供了強大的條件構造器&#xff08;Wrapper&#xff09;&#xff0c;用于構建復雜的 SQL 查詢條件&#xff0c;使得我們…

溝通方法和技巧

0 Preface/Foreword 1 溝通對象 溝通維度&#xff1a; upward&#xff0c;向上溝通&#xff0c;直接上級downward&#xff0c;向下溝通&#xff0c;直接下級horizontal&#xff0c;橫向溝通&#xff0c;同部門/跨部門同事 2 溝通方式&#xff08;5W2H&#xff09; 對于開會和…

小白嘗試某程機票信息爬取

實訓課需要機票數據集&#xff0c;網上沒有&#xff0c;所以我選擇爬取數據 此過程可謂經歷的九九八十一難&#xff0c;也參考了不少大佬的文章&#xff0c;在此特別記錄一下 彎路不多說&#xff0c;我直接講成功的方法 找到請求url 通過控制臺&#xff0c;最后確認下面的 …

在WordPress中獲取10天之內的文章更新數

要在WordPress中獲取10天之內的文章更新數&#xff0c;您可以使用以下代碼片段。這段代碼將顯示在過去10天內更新的文章數量。 <?php // 獲取當前時間戳 $now time();// 計算10天前的時間戳 $ten_days_ago $now - (10 * 24 * 60 * 60);// 設置查詢參數 $args array(pos…

【Spring Boot AOP中切入表達式格式介紹】

文章目錄 一、切入表達式簡介二、切入表達式的語法1. 方法匹配符示例&#xff1a; 2. 類型匹配符示例&#xff1a; 一、切入表達式簡介 切入表達式&#xff08;Pointcut Expression&#xff09;是AOP中定義切入點&#xff08;Pointcut&#xff09;的一種方式。它定義了在哪些連…

基于Java中的SSM框架實現物流管理系統項目【項目源碼+論文說明】

基于Java中的SSM框架實現物流管理系統演示 摘要 企業的發展離不開物流的運輸&#xff0c;在一個大型的企業中&#xff0c;商品的生產和建設&#xff0c;推廣只是前期的一些工作&#xff0c;在后期的商品銷售和物流方面的建立&#xff0c;才能讓一個企業得到大力的發展。 企業…

基于Linux/ARM/單片機利用狀態機對多個按鍵進行掃描實現短按或者長按

1&#xff09;Linux/ARM/單片機入門級按鍵掃描程序設計&#xff0c;分享給將要學習或者正在學習Linux/ARM/單片機開發的同學。 2&#xff09;內容屬于原創&#xff0c;若轉載&#xff0c;請說明出處。 3&#xff09;提供相關問題有償答疑和支持。 學習Linux/ARM/單片機的同學…

docker部署簡單的Kafka

文章目錄 1. 拉取鏡像2. 運行創建網絡運行 ZooKeeper 容器運行 Kafka 容器 3. 簡單的校驗1. 檢查容器狀態2. 檢查 ZooKeeper 日志3. 檢查 Kafka 日志4. 使用 Kafka 命令行工具檢查5. 創建和刪除測試主題 1. 拉取鏡像 選擇一組兼容性好的版本。 docker pull bitnami/kafka:3.6…

Facebook:數字社交的引領者與創新者

自2004年誕生以來&#xff0c;Facebook從一個校園網絡項目迅速成長為全球最大的社交媒體平臺&#xff0c;徹底改變了我們與世界互動的方式。作為數字社交的引領者和創新者&#xff0c;Facebook不僅在技術層面上不斷突破&#xff0c;也在社會和文化領域留下了深刻的印記。本文將…

vue2 + element三級菜單實現模板

需求&#xff1a; 需要一個含有三級菜單的結構模板&#xff0c;用于業務快速開發。 解決&#xff1a; sidebar.vue <template><el-menu :default-active"defaultActive" class"el-menu-vertical-demo" active-text-color"#ffd04b"&…

『大模型筆記』2024大模型AI工程師必備技能!

2024大模型AI工程師必備技能! 文章目錄 一. 2024大模型AI工程師必備技能!1. 引言:理解如何在各種應用中使用大語言模型(LLM)2. 第1層:Question answering(Q&A)3. 第2層:Chatbot=Q&A+短期記憶(上下文知識)4. 第3層:RAG=Q&A+短期記憶(上下文知識)+長期記憶(外…

【論文解讀】CVPR2024:DUSt3R: Geometric 3D Vision Made Easy

論文“”https://openaccess.thecvf.com/content/CVPR2024/papers/Wang_DUSt3R_Geometric_3D_Vision_Made_Easy_CVPR_2024_paper.pdf 代碼&#xff1a;GitHub - naver/dust3r: DUSt3R: Geometric 3D Vision Made Easy DUSt3R是一種旨在簡化幾何3D視覺任務的新框架。作者著重于…

Docker的架構原理

例子可以想象成一個買手機的場景 clien可以想象 你個人 docker deamon &#xff1a;店員 images&#xff1a; 樣機 regisitry&#xff1a; 手機倉庫 container: 使用的手機 首先我要在店員買一個手機&#xff0c;店員發現是樣機&#xff0c;但是倉庫有&#xff0c;&…