【Maven教程】(一)入門介紹篇:Maven基礎概念與其他構建工具:理解構建過程與Maven的多重作用,以及與敏捷開發的關系 ~

Maven入門介紹篇

  • 1?? 基礎概念
      • 1.1 構建
      • 1.2 maven對構建的支持
      • 1.3 Maven的其他作用
  • 2?? 其他構建工具
      • 2.1 IDE
      • 2.2 Make
      • 2.3 Ant
      • 2.4 Jenkins
  • 3?? Maven與敏捷開發
  • 🌾 總結

在這里插入圖片描述

1?? 基礎概念

"Maven"可以翻譯為 “知識的積累者” 或 “專家”。這個詞源于波斯語,意為廣受尊重和富有智慧的人。在軟件開發領域中,Maven作為Apache 組織中的一個頗為成功的開源項目,它是一個非常流行的構建工具,它在項目管理、依賴管理和構建自動化方面提供了強大的功能和支持。因此,Maven 被視為軟件開發過程中的權威專家,能夠幫助開發團隊更高效地構建和管理項目。

無論是小型的開源類庫項目還是大型的企業級應用,無論是傳統的瀑布式開發還是流行的敏捷模式,Maven都能展現其出色的能力。

1.1 構建

其實作為程序員,我們每天都在進行構建(build)工作。上班后的第一件事就是從源代碼庫中拉取最新的代碼,并進行單元測試。如果測試失敗,我們會與同事合作進行調試修復。然后我們繼續自己的工作,編寫單元測試和產品代碼。

忙碌到中午,代碼編寫基本完成,測試也通過了,我們開心地享用午餐并稍作休息。下午開始有些困倦的時候,我們參加例會,會議結束后喝杯咖啡繼續工作。剛才在會議中經理要求查看測試報告,于是我們將相關工具集成到IDE中,生成漂亮的測試覆蓋率報告,然后發郵件給經理,松了口氣。但QA小組又提交了幾個bug,沒辦法,我們先在本地重現,然后熟練地用IDE生成一個WAR包,部署到Web容器中啟動進行測試。一步步復現問題,最后在下班前修復了bug,提交代碼并通知QA小組,愉快地結束了一天的工作。

回想一下,除了編寫源代碼,我們每天也花很多時間來進行編譯、運行單元測試、生成文檔、打包和部署等繁瑣的工作,也就是構建。如果仍然依賴手工完成這些步驟,成本將會非常高。因此,有人通過使用軟件方法完全自動化這一系列工作,使得軟件構建像流水線一樣自動進行,只需簡單的一條命令,所有繁雜的步驟都能夠自動完成,很快就能得到最終結果。

1.2 maven對構建的支持

上面就介紹了Maven 的用途之一是服務于構建,它是一個強大的構建工具,能夠幫我們完成自動化構建過程,從清理、編譯、測試到生成報告,再到打包和部署。我們不需要一遍遍地輸入命令, 我們要做的是使用Maven 配置好項目,然后輸入簡單的命令(如 mvn clean install),Maven 就會幫我們處理那些煩瑣的任務。

Maven是一個跨平臺的構建工具,這意味著不管是在WindowsLinux還是Mac上,我們都可以使用相同的命令進行構建。

我們一直在努力尋找避免重復的方法,包括設計、編碼、文檔以及構建的重復。而Maven最大程度地消除了構建過程中的重復性工作。它抽象了構建生命周期,并提供了許多已實現的插件來完成大部分構建任務。我們不再需要定義過程,甚至不需要實現其中的一些任務。舉個簡單的例子,對于測試來說,我們只需要按照Maven的約定編寫好測試用例,當進行構建時,這些測試會自動運行,無需告訴Maven如何執行測試。

想象一下,Maven抽象了一個完整的構建生命周期模型,吸取了其他構建腳本和工具的優點,并總結了大量項目的實際需求。如果我們遵循這個模型,在很多情況下可以避免許多不必要的錯誤。此外,我們可以直接使用許多成熟的Maven插件來完成任務。

總的來說,Maven作為一個構建工具,具有自動化構建的能力,同時還能夠提供抽象的構建過程和已實現的構建任務。它的跨平臺特性以及提供一致操作接口的特點,使其成為出色且廣受歡迎的構建工具。

1.3 Maven的其他作用

圖1 Maven的logo

Maven不只是一個構建工具,還是一個依賴管理及項目信息管理工具,它通過提供中央倉庫來支撐開發者自動下載組件。

在當今開源的編程時代,幾乎所有的Java應用都會使用一些第三方的開源類庫,這些類庫可以通過依賴的方式引入到項目中。然而,隨著依賴的增加,就可能會出現版本不一致、版本沖突、依賴臃腫等問題。手動解決這些問題非常繁瑣,但幸運的是Maven為我們提供了一個優秀的解決方案。通過依賴坐標系統,Maven能夠精確定位每一個組件(比如jar文件),使類庫世界變得有秩序。借助Maven,我們可以有序地管理依賴,輕松解決復雜的依賴問題。

此外,Maven還幫助我們有效管理項目中分散在各個角落的項目信息,包括項目描述、開發者列表、版本控制系統地址、許可證、缺陷管理系統地址等等。這些微小的變化可能看起來不起眼,但卻在不知不覺中節省了大量查找信息的時間。除了直接的項目信息,Maven還生成網站和提供一些已有插件,使我們輕松獲得有價值的項目信息,比如項目文檔、測試報告、靜態分析報告、源碼版本日志報告等。

另外,Maven還為全球的Java開發者提供了一個免費的中央倉庫,在這個倉庫中幾乎可以找到任何流行的開源類庫。通過一些衍生工具(如Nexus),我們甚至可以快速搜索中央倉庫。只要提供坐標,Maven就能自動下載所需的文件,省去了手工操作的麻煩。

最后,使用Maven還能享受一個額外的好處,即Maven為項目提供了規范的目錄結構、測試用例命名方式等。只要按照這些成熟的規則進行開發,切換項目時無需額外學習,符合"約定優于配置"的原則。

2?? 其他構建工具

Maven 不是Java 領域唯一的構建管理的解決方案。本節將通過一些簡單的例子解釋Maven的必要性,并介紹其他構建解決方案,如IDEMakeAnt, 并將它們與 Maven 進行比較。

2.1 IDE

我們不能否認優秀的集成開發環境(IDE)可以極大地提高開發效率。主流的IDEEclipseNetBeans等,提供了強大的文本編輯、調試和重構功能。盡管使用簡單的文本編輯器和命令行也可以完成大部分開發工作,但很少有人愿意這樣做。然而,IDE卻存在一些缺陷:

  • IDE依賴繁瑣的手工操作。編譯、測試、代碼生成等任務相互獨立,很難通過一鍵操作來完成所有工作,手動操作效率低下;
  • 在項目中統一所有的 IDE配置是很困難的。每個開發者都有自己的配置偏好,正是由于這個原因,一個在A機器上成功運行的任務,在B機器上的 IDE中可能會失敗。

因此,我們應該合理利用IDE,而不是過度依賴它。對于構建這類任務,反復點擊鼠標在 IDE中操作是不夠智能的行為。Maven是在這方面專業的工具,并且主流的 IDE已經集成了Maven,因此我們可以在 IDE中方便地運行Maven進行構建操作。

2.2 Make

Make可能是最早的構建工具,由Stuart Feldman于1977年在貝爾實驗室創建。由于這個貢獻,他在2003年獲得了ACM國際計算機組織頒發的軟件系統獎。目前,Make有許多衍生實現,包括最流行的GNU MakeBSD Make,還有Windows平臺上的Microsoft nmake等。

Make由一個名為 Makefile的腳本文件驅動,該文件使用Make定義的自己的語法格式。它的基本組成部分包括一系列規則(Rules),每條規則包括目標(Target)、依賴(Prerequisite)和命令(Command)。Makefile的基本結構如下:

target: prerequisitecommand

Make通過一系列目標和依賴將整個構建過程串聯起來,并利用本地命令完成每個目標的實際操作。它的強大之處在于可以利用各種系統的本地命令,尤其是UNIX/Linux系統,這些功能豐富且強大的命令能夠幫助 Make快速高效地完成任務。

然而,Make也存在一些限制:它將自己與操作系統綁定在了一起。換句話說,使用Make很難(至少較為困難)實現跨平臺構建,對于Java來說,這非常不友好。此外,Makefile的語法也經常成為問題,很多人抱怨 Make構建失敗的原因往往是由于難以察覺的空格或制表符(Tab)使用錯誤導致的。

2.3 Ant

Ant(Another Neat Tool)是一個構建工具,最初用于構建著名的 Tomcat 服務器。它的創作動機源于James Duncan Davidson 對 Makefile語法格式的不滿。我們可以將Ant 視為Java版本的 Make,正因為使用了Java,Ant是跨平臺的。此外,Ant使用XML來定義構建腳本,相對于Makefile來說更加友好。

類似于MakeAnt 也有一個構建腳本 build.xml,示例如下:

<?xml version="1.0"?>
<project name="Hello"	default="compile"><target name="compile" description="compile the Java source code to class files"><mkdir dir="classes'/><javac srcdir="." destdir="classes"/></target><target name="jar" depends="compile" description="create a Jar file"><jar destfile="hello,jar"><fileset dir="classes" includes="**/s.class"/><manifest><attribute name="Main-Class" value="HelloProgram"/></manifest></jar></target>
</project>

build.xml 的基本結構包括目標(target)、依賴(depends)以及實現目標的任務。例如,在上述腳本中,jar目標用于創建應用程序的 jar文件,該目標依賴于compile目標。compile目標執行的任務是在當前目錄編譯Java文件并將其輸出到一個名為classes的文件夾中。當compile目標完成后,jar目標接著執行自己的任務。

Ant內置了大量用Java實現的任務,這確保了它的跨平臺特性。此外,Ant 還提供了特殊的exec任務用于執行本地命令。

Make 一樣,Ant 也都是過程式的,開發者顯式地指定每一個目標,以及完成該目標所需要執行的任務。針對每一個項目,開發者都需要重新編寫這一過程,這里其實隱含著很大的重復行為。 而Maven 是聲明式的,項目構建過程和過程各個階段所需的工作都由插件實現, 并且大部分插件都是現成的,開發者只需要聲明項目的基本元素, Maven 就執行內置的、 完整的構建過程,這在很大程度上減少了重復性。

在過去的一段時間里,Ant 沒有提供依賴管理功能,這意味著Ant用戶不得不手動管理依賴關系,這是一個很麻煩的問題。幸運的是,現在Ant用戶可以使用Ivy來管理依賴關系。對于Maven用戶來說,依賴管理是最基本的,因為Maven內置了強大的依賴管理功能。此外,Maven還擁有一個中央倉庫,可能是全世界最大的Java開源軟件包集合,因此Maven用戶無需進行任何配置即可直接享受依賴管理的好處。

2.4 Jenkins

圖2 Jenkins的logo

Jenkins是一個開源的自動化工具,用于構建、測試和部署軟件項目。它提供了一種簡單且可擴展的方式來設置和管理軟件交付流程。

相比于Maven,Jenkins更加強大且靈活。通過使用Jenkins,你可以在軟件開發過程中自動化執行各種任務和工作流程,并監視其執行情況。下面是一些Jenkins的核心功能:

  1. 自動化構建和持續集成:Jenkins允許你在代碼提交后自動觸發構建過程,并檢查代碼質量、運行單元測試等。這有助于減少手動操作和加快構建發布周期。

  2. 插件生態系統:Jenkins擁有豐富的插件生態系統,使你可以輕松地擴展其功能。這些插件包括與其他工具的集成、生成報告、發送通知等。例如,你可以使用Maven插件將Maven生成的結果集成到Jenkins中并展示。

  3. 流水線管理:Jenkins支持基于流水線的軟件交付流程定義和管理。使用Jenkins Pipeline插件,你可以以可編程的方式定義整個交付流程,包括構建、測試、部署和回滾等步驟。

  4. 可視化報告:Jenkins能夠將各個階段的結果以圖表的形式展示出來,包括構建情況、測試覆蓋率、代碼質量等。這使得開發人員和項目經理可以更方便地查看和分析項目的狀態和趨勢。

通過Jenkins,你可以實現更高效的軟件交付過程,并為團隊提供實時可視化的項目狀態信息。它提供了一個集中化的平臺,以管理和執行各種工作流程,節省了配置和維護不同工具之間的復雜性。

本專欄主要介紹Maven,那么對于同樣重要的 Jenkins技術,后續我會專門做一個專欄做更詳細的知識介紹,請大家持續關注。

3?? Maven與敏捷開發

首先需要了解,敏捷開發(Agile Development)是一種軟件開發方法理論,旨在通過迭代、協作和靈活性來應對變化的需求。它強調快速響應變更、頻繁交付可工作的軟件以及與客戶緊密合作等核心原則。

而極限編程(Extreme Programming)則是敏捷開發中一種具體的實踐方法之一,其目標是提供高質量的軟件解決方案,并通過團隊合作和持續反饋來增加生產效率。極限編程強調快速迭代、自動化測試、簡單設計、持續集成以及面向人員的價值觀等重要實踐。

下面看一下 Maven 是如何適應極限編程的。

  • 簡單性。Maven 暴露了一組一致且簡潔的操作接口,能幫助團隊成員從原來高度自定義的、復雜的構建系統中解脫出來,使用Maven 現有的成熟穩定的組件,也能簡化構建系統的復雜度;
  • 交流與反饋。與版本控制系統結合后,所有人都能執行最新的構建并快速得到反饋。此外,自動生成的項目報告也能幫助成員了解項目的狀態,促進團隊的交流;
  • 測試驅動開發 (TDD)。TDD 強調測試先行,所有產品都應該由測試用例覆蓋。而測試是Maven 生命周期的最重要的組成部分之一,并且 Maven 有現成的成熟插件支持 業界流行的測試框架,如 JUnitTestNG
  • 快速構建。快速構建強調我們能夠隨時快速地從源碼構建出最終的產品。這正是Maven 所擅長的,只需要一些配置,之后用一條簡單的命令就能讓 Maven 幫你清理、編譯、測試、打包、部署,然后得到最終的產品;
  • 持續集成 (CI) 。CI 強調項目以很短的周期(如15分鐘)集成最新的代碼。實際上, CI 的前提是源碼管理系統和構建系統。流行的CI 服務器如 HudsonCruiseControl 都能很好地和 Maven 進行集成。也就是說,使用Maven 后,持續集成會變得更加方便;
  • 富有信息的工作區。強調開發者能夠快速方便地了解到項目的最新狀態。 當然, Maven 并不會幫你把測試覆蓋率報告貼到墻上,也不會在你的工作臺上放個鴨子告訴你構建失敗了。不過使用Maven 發布的項目報告站點,并配置你需要的項目報告,如測試覆蓋率報告,都能幫你把信息推送到開發者眼前。

上述這些實踐并非只在極限編程中適用。事實上,除了其他敏捷開發方法如 SCRUM 之外,幾乎任何軟件開發方法都能借鑒這些實踐。也就是說, Maven 幾乎能夠很好地支持任何軟件開發方法。

例如,在傳統的瀑布模型開發中,項目依次要經歷需求開發、分析、設計、編碼、測試和集成發布階段。從設計和編碼階段開始,就可以使用 Maven 來建立項目的構建系統。 在設計階段,也完全可以針對設計開發測試用例,然后再編寫代碼來滿足這些測試用例。 然而,有了自動化構建系統,我們可以節省很多手動的測試時間。此外,盡早地使用構建系統集成團隊的代碼,對項目也是百利而無一害。最后, Maven 還能幫助我們快速地發布項目。

🌾 總結

本文從概念上簡單地介紹了一下Maven, 通過本章我們應該能大致了解Maven 是什么以及它有什么用途。我們還將Maven 與其他流行的構建工具(如Make 和 Ant等) 做了一些對比分析。如果你沒用過Maven, 但有Make 或者 Ant 的使用經驗,相信通過比較你能更清楚地了解各種工具的優劣勢,并且會對Maven 有一個理性的認識。

將 Maven 和敏捷開發與極限編程結合起來分析是為了讓大家從另 一個角度了解Maven, 畢競軟件開發離不開對于軟件過程的理解。希望大家積極理解 Maven并從中受益。


? 繼續閱讀下一篇(點擊跳轉)
《》

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

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

相關文章

Qt應用開發(基礎篇)——MDI窗口 QMdiArea QMdiSubWindow

一、前言 QMdiArea類繼承于QAbstractScrollArea&#xff0c;QAbstractScrollArea繼承于QFrame&#xff0c;是Qt用來顯示MDI窗口的部件。 滾屏區域基類 QAbstractScrollAreahttps://blog.csdn.net/u014491932/article/details/132245486 框架類 QFramehttps://blog.csdn.net/u01…

面試算法編程題

面試算法編程題記錄 題目 : 羊圈里的狼 題目背景 : 一到了晚上&#xff0c;草原牧民的羊就會被趕進羊圈里。這時&#xff0c;野外的狼群就會打羊羔的主意。為了保護羊羔&#xff0c;牧民需要將羊圈里的狼趕走或殺死。由于來的狼很多&#xff0c;他需要快速甄別哪些狼在羊圈里面…

FANUC機器人加減速倍率指令ACC的使用方法說明

FANUC機器人加減速倍率指令ACC的使用方法說明 單位有一臺FANUC機器人(型號:M-900iB 360kg),偶爾會在啟動的瞬間會報SRVO-050碰撞檢測報警,而事實上機器人并沒有開始移動或和其他工件產生碰撞,一直查了很長時間,也沒有查到具體的原因,也嘗試過重新進行負載推算,但是偶爾…

恒運資本:CPO概念發力走高,兆龍互聯漲超10%,華是科技再創新高

CPO概念15日盤中發力走高&#xff0c;截至發稿&#xff0c;華是科技漲超15%再創新高&#xff0c;兆龍互聯漲逾11%&#xff0c;中貝通訊漲停&#xff0c;永鼎股份、太辰光漲超5%&#xff0c;天孚通訊漲逾4%。 消息面上&#xff0c;光通訊聞名咨詢機構LightCounting近日發布的202…

國產之光:訊飛星火最新大模型V2.0

大家好&#xff0c;我是herosunly。985院校碩士畢業&#xff0c;現擔任算法研究員一職&#xff0c;熱衷于機器學習算法研究與應用。曾獲得阿里云天池比賽第一名&#xff0c;CCF比賽第二名&#xff0c;科大訊飛比賽第三名。擁有多項發明專利。對機器學習和深度學習擁有自己獨到的…

每天一道leetcode:1466. 重新規劃路線(圖論中等廣度優先遍歷)

今日份題目&#xff1a; n 座城市&#xff0c;從 0 到 n-1 編號&#xff0c;其間共有 n-1 條路線。因此&#xff0c;要想在兩座不同城市之間旅行只有唯一一條路線可供選擇&#xff08;路線網形成一顆樹&#xff09;。去年&#xff0c;交通運輸部決定重新規劃路線&#xff0c;以…

OpenCV-Python中的圖像處理-視頻分析

OpenCV-Python中的圖像處理-視頻分析 視頻分析Meanshift算法Camshift算法光流Lucas-Kanade Optical FlowDense Optical Flow 視頻分析 學習使用 Meanshift 和 Camshift 算法在視頻中找到并跟蹤目標對象: Meanshift算法 Meanshift 算法的基本原理是和很簡單的。假設我們有一堆…

Failed to init API, possibly an invalid tessdata path: ./ ubuntu

1、問題描述 Failed to init API, possibly an invalid tessdata path: ./2、解決方案&#xff1a; 添加“TESSDATA_PREFIX”到系統環境變量中&#xff0c;值為testdata的父路徑&#xff08;一般就是 Tesseract-OCR 的安裝路徑&#xff09;亦可解決。在~/.bashrc中添加 expo…

【學習日記】【FreeRTOS】空閑任務與阻塞延時

寫在前面 本文是基于野火 RTOS 教程對空閑任務和阻塞延時的詳解。 一、什么是任務中的阻塞延時 說到阻塞延時&#xff0c;筆者的第一反應就是在單片機的 while 循環中&#xff0c;使用一個 for 循環不斷遞減一個大數&#xff0c;通過 CPU 不斷執行一條指令的耗時進行延時。這…

python優雅地爬蟲!

背景 我需要獲得新聞&#xff0c;然后tts&#xff0c;在每天上班的路上可以聽一下。具體的方案后期我也會做一次分享。先看我喜歡的萬能的老路&#xff1a;獲得html內容-> python的工具庫解析&#xff0c;獲得元素中的內容&#xff0c;完成。 好家伙&#xff0c;我知道我爬…

視頻云存儲/安防監控/視頻匯聚EasyCVR平臺新增設備經緯度選取

視頻云存儲/安防監控EasyCVR視頻匯聚平臺基于云邊端智能協同&#xff0c;支持海量視頻的輕量化接入與匯聚、轉碼與處理、全網智能分發、視頻集中存儲等。音視頻流媒體視頻平臺EasyCVR拓展性強&#xff0c;視頻能力豐富&#xff0c;具體可實現視頻監控直播、視頻輪播、視頻錄像、…

公網遠程連接Redis數據庫「內網穿透」

文章目錄 1. Linux(centos8)安裝redis數據庫2. 配置redis數據庫3. 內網穿透3.1 安裝cpolar內網穿透3.2 創建隧道映射本地端口 4. 配置固定TCP端口地址4.1 保留一個固定tcp地址4.2 配置固定TCP地址4.3 使用固定的tcp地址連接 前言 潔潔的個人主頁 我就問你有沒有發揮&#xff0…

藍牙資訊|蘋果Apple Watch可手勢操控Mac和Apple TV等設備

根據美國商標和專利局&#xff08;USPTO&#xff09;公示的清單&#xff0c;蘋果公司近日獲得了一項技術專利&#xff0c;概述了未來的 Apple Watch 手表&#xff0c;使用手勢等操控 Mac 和 Apple TV 等設備。 該專利描述未來 Apple Watch 可以交互實現編輯圖像、繪圖、處理文…

02:STM32--EXTI外部中斷

目錄 一:中斷 1:簡歷 2:AFIO 3:EXTI ?編輯 4:NVIC基本結構 5:使用步驟 二:中斷的應用 A:對外式紅外傳感計數器 1:連接圖?編輯 2:函數介紹 3:硬件介紹 4:計數代碼 B;旋轉編碼計數器 1:連接圖 2:硬件介紹 3:旋轉編碼器代碼: 一:中斷 1:簡歷 中斷&#xff1a;在主程…

Flutter 測試小結

Flutter 項目結構 pubspec.yaml 類似于 RN 的 package.json&#xff0c;該文件分別在最外層及 example 中有&#xff0c;更新該文件后&#xff0c;需要執行的 Pub get lib 目錄下的 dart 文件為 Flutter 插件封裝后的接口源碼&#xff0c;方便在其他 dart 文件中調用 example 目…

python通過S7協議讀取西門子200smart數據

發現網上很多關于python通過s7協議控制200smart的代碼都失敗&#xff0c;我猜應該是版本的問題。自己搗鼓了半天&#xff0c;終于測試成功 from snap7 import util,clientmy_plc client.Client() #建立一個客戶端對象 my_plc.set_connection_type(3) #如果是200smart,必須有此…

Flink流批一體計算(14):PyFlink Tabel API之SQL查詢

舉個例子 查詢 source 表&#xff0c;同時執行計算 # 通過 Table API 創建一張表&#xff1a; source_table table_env.from_path("datagen") # 或者通過 SQL 查詢語句創建一張表&#xff1a; source_table table_env.sql_query("SELECT * FROM datagen&quo…

QT實現天氣預報

1. MainWindow類設計的成員變量和方法 public: MainWindow(QWidget* parent nullptr); ~MainWindow(); protected: 形成文本菜單來用來右鍵關閉窗口 void contextMenuEvent(QContextMenuEvent* event); 鼠標被點擊之后此事件被調用 void mousePressEvent(QMouseEv…

Leetcode每日一題:1444. 切披薩的方案數(2023.8.17 C++)

目錄 1444. 切披薩的方案數 題目描述&#xff1a; 實現代碼與解析&#xff1a; 二維后綴和 動態規劃 原理思路&#xff1a; 1444. 切披薩的方案數 題目描述&#xff1a; 給你一個 rows x cols 大小的矩形披薩和一個整數 k &#xff0c;矩形包含兩種字符&#xff1a; A …

Spring(三):Spring中Bean的生命周期和作用域

前言 在 Spring 中&#xff0c;那些組成應用程序的主體及由 Spring IOC 容器所管理的對象&#xff0c;被稱之為 bean。簡單地講&#xff0c;bean 就是由 IOC 容器初始化、裝配及管理的對象&#xff0c;除此之外&#xff0c;bean 就與應用程序中的其他對象沒有什么區別了。而 b…