【Spring詳解一】Spring整體架構和環境搭建

一、Spring整體架構和環境搭建

1.1 Spring的整體架構

Spring框架是一個分層架構,包含一系列功能要素,被分為大約20個模塊

  • Spring核心容器:包含Core、Bean、Context、Expression Language模塊
    • Core :其他組件的基本核心,主要包含Spring框架基本的核心工具類
    • Beans :包含訪問配置文件、創建和管理bean以及IOC/DI(控制反轉和依賴注入)操作相關的所有類
    • Context :構建與Core和Beans基礎之上,繼承BeanFactory,提供上下文信息,擴展出JNDI、EJB、電子郵件、國際化等功能
    • Expression Language :提供了一個強大的語言表達式用于在運行時查詢和操縱對象。
  • Spring數據訪問與集成
    • JDBC :提供了JDBC的抽象層
    • ORM :提供了JPA、JDO、Hibernate、iBatis 等ORM映射層
    • OXM :提供了Object/XML映射實現的抽象層,該實現包括JAXB、Castor、XMLBeans、JiBX和XStream
    • JMS(Java Messaging Service) :制造和消費消息
    • Transaction :編程和聲明性的事務管理
  • Spring AOP:集成了所有AOP功能
  • Spring Web與遠程調用
    • Web :提供了基礎的 Web 開發的上下文信息,現有的Web框架,如JSF、Tapestry、Structs等,提供了集成
    • Web MVC:提供了 Web 應用的 Model-View-Controller 全功能實現。
    • Websocket

1.2 Spring環境搭建

1.2.1 安裝git

Git - Downloads

1.2.2 安裝Gradle

1.)下載安裝包

下載地址:? Gradle Distributions

2)配置環境變量

#1.打開.bash_profile文件
open -e ~/.bash_profile
#2.在.bash_profile文件中配置環境變量
GRADLE_HOME=//Users/sunshine/Documents/software/gradle/gradle-7.5.1
export GRADLE_HOME
export PATH=$PATH:$GRADLE_HOME/bin

3)查看Gradle版本

gradle -version

1.2.3 下載Spring源碼

git clone git@github.com:spring-projects/spring-framework.git
git clone https://github.com/spring-projects/spring-framework.git

我使用的是5.3.x分支。

注意:要使用 git@github.com:spring-projects/spring-framework.git 需要配置ssh秘鑰:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
//會生成私鑰文件 id_rsa 和公鑰文件 id_rsa.pub
//windows 一般在 C:\Users\Administrator\.ssh 目錄,linux和mac在 ~/.ssh
//把生成的公鑰拷貝到GitHub 的設置中的 SSH 密鑰部分

如果使用 https 超時,可以增加 Git 的 HTTP/HTTPS 超時時間:

git config --global http.lowSpeedLimit 0
git config --global http.lowSpeedTime 999999

如果使用了VPN代理服務器,確保 Git 的代理設置是正確的。你可以通過以下命令檢查或設置代理:

//查看當前代理設置
git config --global --get http.proxy
//設置代理
git config --global http.proxy http://proxy_host:port
git config --global https.proxy https://proxy_host:port
//取消代理設置
git config --global --unset http.proxy
git config --global --unset https.proxy

1.2.4 配置IDEA

配置IDEA的本地gradle環境:

配置項目字節碼版本:

最后在 Project Structure 配置sdk版本。

1.2.5 配置 Spring-Framework 源碼的gradle倉庫

配置gradle下載地址為本地(路徑為gradle二進制文件壓縮包路徑):

//文件為 gradle/wrapper/gradle-wrapper.properties
distributionUrl=file:///F:/work_folder/gradle-7.5.1-bin.zip

配置倉庫鏡像 :

//根目錄下文件\buildSrc\build.gradle
repositories {maven { url 'https://maven.aliyun.com/repository/public/' }maven { url 'https://maven.aliyun.com/repository/central' }mavenCentral()gradlePluginPortal()
}

根目錄下文件\build.gradle 的 mavenCentral() 之前加上:

maven { url 'https://maven.aliyun.com/repository/public/' }
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url "https://maven.aliyun.com/repository/spring-plugin" }
maven { url "https://maven.aliyun.com/repository/gradle-plugin" }

1.2.6 新建模塊,測試環境

添加依賴 /spring-f2-test/build.gradle :

添加測試類:

public class User {String name;public User(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +'}';}
}@Configuration
public class JavaConfig {@Beanpublic User user(){return new User("lister");}
}public class TestApplication {public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class);User user = (User) context.getBean("user");System.out.println(user);}
}
//結果打印
User{name='lister'}

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

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

相關文章

Linux內核讀寫鎖與讀寫信號量的區別及選用

在Linux內核中,讀寫鎖(rwlock_t)和讀寫信號量(struct rw_semaphore)是兩種不同的同步機制,適用于不同的場景。以下是它們的區別和選用建議: 核心區別 特性讀寫鎖 (rwlock_t)讀寫信號量 (struct…

用openresty和lua實現壁紙投票功能

背景 之前做了一個隨機壁紙接口,但是不知道大家喜歡對壁紙的喜好,所以干脆在實現一個投票功能,讓用戶給自己喜歡的壁紙進行投票。 原理說明 1.當訪問http://demo.com/vote/時,會從/home/jobs/webs/imgs及子目錄下獲取圖片列表&…

LLaMA 3.1 模型在DAMODEL平臺的部署與實戰:打造智能聊天機器人

文章目錄 前言 一、LLaMA 3.1 的特點 二、LLaMA3.1的優勢 三、LLaMA3.1部署流程 (一)創建實例 (二)通過JupyterLab登錄實例 (3)部署LLaMA3.1 (4)使用教程 總結 前言 LLama3…

【Python爬蟲(25)】解鎖Python爬蟲:數據存儲的最優選擇與高效策略

【Python爬蟲】專欄簡介:本專欄是 Python 爬蟲領域的集大成之作,共 100 章節。從 Python 基礎語法、爬蟲入門知識講起,深入探討反爬蟲、多線程、分布式等進階技術。以大量實例為支撐,覆蓋網頁、圖片、音頻等各類數據爬取&#xff…

【復現DeepSeek-R1之Open R1實戰】系列8:混合精度訓練、DeepSpeed、vLLM和LightEval介紹

這里寫目錄標題 1 混合精度訓練1.1 FP16和FP321.2 優點1.3 存在的問題1.4 解決辦法 2 DeepSpeed3 vLLM3.1 存在的問題3.2 解決方法3.2.1 PagedAttention3.2.2 KV Cache Manager3.2.3 其他解碼場景 3.3 結論 4 LightEval4.1 主要功能4.2 使用方法4.3 應用場景 本文繼續深入了解O…

使用 FFmpeg 剪輯視頻指南

FFmpeg 是一個功能強大的多媒體處理工具,可以進行視頻和音頻的剪輯、合并、轉碼等操作。本文將詳細介紹如何使用 FFmpeg 進行視頻剪輯,并通過實例幫助你快速掌握剪輯技巧。我們會從最基礎的剪切功能講起,再延伸到一些高級操作,如指…

【分布式理論15】分布式調度1:分布式資源調度的由來與過程

文章目錄 一、操作系統的資源調度:從單核到多核二、 分布式系統的資源調度:從單臺服務器到集群三、 固定資源映射四、 動態資源分配:靈活的任務-資源匹配五、 資源調度過程:從申請到執行 本文主要討論主題: 從操作系統…

【Linux C/C++開發】Linux系統輕量級的隊列緩存mqueue

前言 開發設計時,通常會對業務流程進行模塊化,有些流程之間,不要求同步,但又需要傳遞信息時,如果存儲到數據庫,效率降低很多,如果是存放在內存是最好的。此時可以選擇系統的IPC(進程…

Vue 實現通過URL瀏覽器本地下載 PDF 和 圖片

1、代碼實現如下: 根據自己場景判斷 PDF 和 圖片,下載功能可按下面代碼邏輯執行 const downloadFile async (item: any) > {try {let blobUrl: any;// PDF本地下載if (item.format pdf) {const response await fetch(item.url); // URL傳遞進入i…

計算機網絡基礎雜談(局域網、ip、子網掩碼、網關、DNS)

目錄 1. 簡單局域網的構成 2. IP 地址 3. 子網掩碼 4. IP地址詳解自定義IP 5. IP 地址詳解 6. 網關 7. DNS 域名解析 8. ping 1. 簡單局域網的構成 交換機是組建局域網最重要的設備,換句話說,沒有交換機就沒法搭建局域網 交換機不能讓局域網連…

Thor: 統一AI模型網關的革新之選

項目價值 Thor(雷神托爾)作為一個強大的AI模型管理網關,解決了當前AI領域一個關鍵痛點:不同AI服務商的API格式各異,集成成本高。Thor通過將各種AI模型的獨特格式統一轉換為OpenAI格式,顯著降低了開發者的使用門檻和維護成本。 核…

25年2月通信基礎知識補充:多普勒頻移與多普勒擴展、3GPP TDL信道模型

看文獻過程中不斷發現有太多不懂的基礎知識,故長期更新這類blog不斷補充在這過程中學到的知識。由于這些內容與我的研究方向并不一定強相關,故記錄不會很深入請見諒。 【通信基礎知識補充7】25年2月通信基礎知識補充1 一、多普勒頻移與多普勒擴展傻傻分不…

【Python】Python入門——筆記合集

哈哈 00、環境搭建 學習Python,首先需要搭建一個本地開發環境,或是使用線上開發環境(各類練習網站),這篇博客里主要記錄了本地開發環境的配置方法。內容包括python解釋器的安裝以及pycharm的安裝、漢化等。 博客地…

為什么mvcc中?m_ids 列表并不等同于 min_trx_id 和 max_trx_id 之間的所有事務 ID

首先我們要明確 m_ids 表示創建 ReadView 時,系統中所有活躍(未提交)事務的事務 ID 列表。 僅包含當前未提交的事務,與事務 ID 的數值范圍無關。 min_trx_id 是 m_ids 中的最小值。若 m_ids 為空,則 min_trx_id 等于…

使用 Spark NLP 實現中文實體抽取與關系提取

在自然語言處理(NLP)領域,實體抽取和關系提取是兩個重要的任務。實體抽取用于從文本中識別出具有特定意義的實體(如人名、地名、組織名等),而關系提取則用于識別實體之間的關系。本文將通過一個基于 Apache Spark 和 Spark NLP 的示例,展示如何實現中文文本的實體抽取和…

FPGA開發要學些什么?如何快速入門?

隨著FPGA行業的不斷發展,政策的加持和投入的研發,近兩年FPGA行業的薪資也是水漲船高,一些人轉行后拿到了薪資30W,甚至有一些能力強的人可以拿到60W,看到這里想必不少人表示很心動,但又不知道怎么轉&#xf…

使用Python和正則表達式爬取網頁中的URL數據

在數據抓取和網絡爬蟲開發中,提取網頁中的URL是一個常見的需求。無論是用于構建網站地圖、分析鏈接結構,還是進行內容聚合,能夠高效地從HTML文檔中提取URL都是一個重要的技能。Python作為一種強大的編程語言,結合其正則表達式模塊…

人工智能之目標追蹤DeepSort源碼解讀(yolov5目標檢測,代價矩陣,余弦相似度,馬氏距離,匹配與預測更新)

要想做好目標追蹤,須做好目標檢測,所以這里就是基于yolov5檢測基礎上進行DeepSort,叫它為Yolov5_DeepSort。整體思路是先檢測再追蹤,基于檢測結果進行預測與匹配。 一.參數與演示 這里用到的是coco預訓練人的數據集: 二.針對檢測結果初始化track 對每一幀數據都輸出…

C++藍橋杯基礎篇(四)

片頭 嗨~小伙伴們,大家好!今天我們來學習C藍橋杯基礎篇(四),繼續練習相關習題。準備好了嗎?咱們開始咯~ 題目1 連續整數相加 思路分析: 這道題,我們可以把從鍵盤中讀取n寫在while循…

YOLOv12從入門到入土(含結構圖)

論文鏈接:https://arxiv.org/abs/2502.12524 代碼鏈接:https://github.com/sunsmarterjie/yolov12 文章摘要: 長期以來,增強YOLO框架的網絡架構一直至關重要,但一直專注于基于cnn的改進,盡管注意力機制在建…