【SpringBoot】11 概念理解 - 深入理解 Java 和 Spring 中的容器、組件、類、對象與 Bean

文章目錄

    • 引言
    • 1. 基本概念解析
      • 1.1 類(Class)
      • 1.2 對象(Object)
      • 1.3 組件(Component)
      • 1.4 Bean 實例(Bean Instance)
      • 1.5 容器(Container)
    • 2. 運行時 vs. 非運行時的區別
    • 3. 關鍵關聯與流程
      • 3.1 類 → 對象
      • 3.2 組件(@Component)→ Bean 實例
      • 3.3 容器(ApplicationContext)管理所有 Bean
      • 3.4 Bean 的生命周期
    • 4. 常見問題解答
      • 4.1 @Component 和 new 創建的對象有什么區別?
      • 4.2 Bean 的作用域(Scope)有哪些?
      • 4.3 如何手動獲取 Bean?
    • 5. 總結


引言

在 Java 和 Spring 開發中,我們經常聽到容器(Container)、組件(Component)、類(Class)、對象(Object)、Bean 實例(Bean Instance)這些術語。它們看似相似,但在不同階段(代碼編寫時 vs. 運行時)有著不同的含義和作用。本文將系統性地介紹這些概念,并解釋它們在 Spring 框架中的運行機制,幫助開發者更好地理解 Spring 的核心原理。

1. 基本概念解析

1.1 類(Class)

定義:類是 Java 的代碼模板,用于描述對象的屬性和方法(如 Car.java)。
非運行時:僅存在于 .java 源代碼或編譯后的 .class 字節碼文件中。
運行時:被 JVM 加載到內存,成為可實例化的模板。

示例:

public class Car {private String brand;public void drive() {System.out.println("Driving " + brand);}
}

1.2 對象(Object)

定義:類的實例(如 new Car())。
非運行時:不存在(對象是運行時的概念)。
運行時:在堆內存中分配空間,存儲數據。

示例:

Car myCar = new Car(); // 創建一個 Car 對象
myCar.drive();         // 調用對象方法

1.3 組件(Component)

定義:在 Spring 中,被 @Component(或其派生注解,如 @Service、@Controller)標記的類,表示它是一個可被 Spring 管理的對象。
非運行時:只是一個普通類,Spring 不會管理它。
運行時:Spring 會掃描并創建它的 Bean 實例。

示例:

@Component
public class UserService {public void login() {System.out.println("User logged in");}
}

1.4 Bean 實例(Bean Instance)

定義:由 Spring 容器管理的對象(即 Spring 創建的組件實例)。
非運行時:不存在(Bean 是運行時概念)。
運行時:Spring 通過 IoC 容器創建并管理它的生命周期(如依賴注入、AOP 代理等)。

示例:

@Autowired
private UserService userService; // Spring 自動注入 UserService 的 Bean

1.5 容器(Container)

定義:Spring 的 IoC(控制反轉)容器,負責管理所有 Bean。
非運行時:不存在(容器是運行時的概念)。
運行時:
ApplicationContext:Spring 的核心容器,存儲所有 Bean。
BeanFactory:更底層的容器接口。

示例:

ApplicationContext context = SpringApplication.run(App.class, args);
UserService userService = context.getBean(UserService.class); // 從容器獲取 Bean

2. 運行時 vs. 非運行時的區別

概念非運行時(代碼階段)運行時(JVM + Spring 運行)
類(Class)存在于 .java/.class 文件被 JVM 加載到內存
對象(Object)不存在在堆內存中分配
組件(@Component)只是一個普通類Spring 掃描并創建 Bean
Bean 實例不存在由 Spring 容器管理
容器不存在ApplicationContext 管理所有 Bean

3. 關鍵關聯與流程

3.1 類 → 對象

類定義結構,運行時通過 new 關鍵字創建對象。
示例:

Car car = new Car(); // 創建一個對象

3.2 組件(@Component)→ Bean 實例

Spring 掃描 @Component 類,并在容器中創建其 Bean 實例。
示例:

@Component
public class OrderService { ... }// 運行時,Spring 自動創建 OrderService 的 Bean

3.3 容器(ApplicationContext)管理所有 Bean

容器存儲所有 Bean,并提供依賴注入(DI)等功能。
示例:

@Autowired
private OrderService orderService; // Spring 自動注入 Bean

3.4 Bean 的生命周期

  1. 創建:Spring 啟動時,容器初始化所有單例 Bean。
  2. 依賴注入:@Autowired 自動注入依賴。
  3. 銷毀:容器關閉時,調用 @PreDestroy 方法。

4. 常見問題解答

4.1 @Component 和 new 創建的對象有什么區別?

@Component 的類由 Spring 管理(依賴注入、AOP 等)。
new 創建的對象不受 Spring 管理,無法自動注入依賴。

4.2 Bean 的作用域(Scope)有哪些?

singleton(默認):整個應用一個實例。
prototype:每次請求都創建新實例。
request/session:Web 環境下有效。

4.3 如何手動獲取 Bean?

ApplicationContext context = ...;
Car car = context.getBean(Car.class);

5. 總結

概念作用運行時表現
定義對象結構被 JVM 加載
對象類的實例堆內存分配
組件標記 Spring 管理的類Spring 創建 Bean
BeanSpring 管理的對象存儲在容器中
容器管理所有 BeanApplicationContext 控制流程

理解這些概念及其運行時行為,能幫助開發者更好地掌握 Spring 的運行機制和依賴注入原理,從而編寫更高效、可維護的代碼。

希望本文對你有所幫助!如果有任何疑問,歡迎留言討論。

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

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

相關文章

【學習嵌入式day-25-線程】

exec函數族exec函數族利用進程空間執行另一份代碼#include "../head.h"int main(void) {char *parg[5] {"./hello","how","are","you",NULL,};printf("execl-up\n");//execl("./hello", "./hello…

Rust 中 Box 的深度解析:作用、原理與最佳實踐

Rust 中 Box 的深度解析:作用、原理與最佳實踐 Box 是 Rust 中最基礎且最重要的智能指針類型,它在 Rust 的內存管理和所有權系統中扮演著核心角色。以下是關于 Box 的全面解析: Box 的核心作用 #mermaid-svg-m6liFZlmqOHRfIZB {font-family:&…

【測試用例】

需求背景部分金融/政企等行業客戶,企業內部安全要求較高,且因為某些原因未接入 sso 登錄,會要求 MG 提供較為復雜的密碼規則甚至提供強更機制;且每個客戶的安全要求不一樣目前 MG 線上密碼規則: 8 位以上,包…

Klipper-probe模塊

配置信息[probe] pin: !PD4 x_offset: 0 y_offset: 0 z_offset: -0.20 #the distance between nozzle and level switch speed: 10 samples: 2 #probe one point three times get an average samples_result: average sample_retract_dist: 5 samples_tolerance: 0.05 # …

Excel多級數據結構導入導出工具

Excel多級數據結構導入導出工具 這是一個功能強大的Excel導入導出工具庫,專門用于處理復雜的多級嵌套數據結構。通過自定義注解配置,可以輕松實現Java對象與Excel文件之間的雙向轉換。 核心功能特性 1. 多級數據結構支持 嵌套對象處理: 支持任意層級的對…

基于UniApp的新大陸物聯網平臺溫濕度檢測系統開發方案

新大陸物聯網平臺對接要點 認證方式: 使用AccessToken進行API認證 Token存儲在本地緩存中 數據格式: 溫度數據單位:攝氏度(C) 濕度數據單位:百分比(%) 時間格式:ISO 8601或時間戳 設備狀態: online:…

Git、JSON、MQTT

GIT簡介:Git是什么?Git是目前世界上最先進的分布式版本控制系統作用:版本控制(版本的備份--->版本的回溯和前進)多人協作優勢:SVN(集中式)劣勢:過度依賴服務器和網絡,容災性差Git…

yolo目標檢測技術之yolov11項目實戰(三)

yolo目標檢測技術之yolov11項目實戰(三) 文章目錄yolo目標檢測技術之yolov11項目實戰(三)一、 基于 YOLO11 的火焰與煙霧檢測系統(實戰代碼)項目目標環境搭建創建虛擬環境安裝依賴1.1 數據集準備1. 下載地址…

CF思維小訓練(二)

清晰的繽紛的都可以 臟兮兮的甜的也都有轉機 不想太小心 錯過第一百零一場美麗 CF思維小訓練(二) 書接上回CF思維小訓練-CSDN博客 雖然代碼很短,都是每一道題的背后都思維滿滿; 目錄CF思維小訓練(二)Arbo…

分布式鎖:從理論到實戰的深度指南

1. 分布式鎖是啥?為什么它比單機鎖更“硬核”?分布式鎖,聽起來高大上,其實核心問題很簡單:在多個機器、進程或服務同時搶奪資源時,怎么保證不打架? 想象一下,你在雙十一搶購限量款球…

基于UniApp的智能在線客服系統前端設計與實現

了解更多,搜索“程序員老狼”一、引言在當今數字化時代,客戶服務已成為企業競爭力的重要組成部分。本文將詳細介紹一款基于UniApp框架開發的跨平臺智能客服系統前端實現方案,該系統不僅具備傳統客服功能,還融入了現代即時通訊和人…

react與vue的對比,來實現標簽內部類似v-for循環,v-if等功能

前言:在vue中我們提供了很多標簽方法,比如用的比較多的v-for循環內容,v-if/v-show等判斷,可以直接寫在標簽中,大大提高了我們的開發效率,那么在react中有沒有類似的方法呢?我們這里來說一說。re…

PCB工藝-四層板制作流程(簡單了解下)

一)流程:四層板的內層芯板,是由一張雙面覆銅板PP*2銅箔*2覆銅板蝕刻好線路,就是我們的芯板了PP全名叫半固化片,主體是玻璃纖維布環氧樹脂,是絕緣介質銅箔片,是單獨一張銅箔,很薄&…

無人機三維路徑規劃

文章目錄 1、引言 2、背景知識 3、核心算法 4、挑戰與優化 5、初始效果 6、需要改進地方 7、水平方向優化路線 8、垂直方向優化路線 9、與經過路線相交的網格都繪制出來 1、引言 介紹三維路徑規劃的定義和重要性:在無人機、機器人導航、虛擬現實等領域的應用。 概述文章目標和…

Spring-解決項目依賴異常問題

一.檢查項目的Maven路徑是否正確在確保新項目中的依賴在自己的電腦中已經存在的情況下:可以檢查項目的Maven路徑是否正確在拿到一個新項目時,要檢查這個項目的Maven路徑是自己電腦上設置好的Maven路徑嗎?如果不是,項目依賴會出問題…

系統設計——DDD領域模型驅動實踐

摘要本文主要介紹了DDD(領域驅動設計)在系統設計中的實踐應用,包括其在編碼規范、分層架構設計等方面的具體要求和建議。重點強調了應用層的命名規范,如避免使用模糊的Handler、Processor等命名,推薦使用動詞加業務動作…

開源衛星軟件平臺LibreCube技術深度解析

LibreCube技術深度解析:開源衛星軟件平臺的完整指南 LibreCube是一個專為CubeSat設計的模塊化開源衛星軟件平臺,它通過整合姿態控制、通信管理和任務調度等核心功能,為立方星開發者提供了完整的解決方案。本文將全面剖析LibreCube的技術架構…

React(四):事件總線、setState的細節、PureComponent、ref

React(四) 一、事件總線 二、關于setState的原理 1. setState的三種使用方式 (1)基本使用 (2)傳入一個回調 (3)第一個參數是對象,第二個參數是回調 2. 為什么setState要設置成異步 (1)提升性能,減少render次數 (2)避免state和props數據不同步 3. 獲取異步修改完數…

CPUcores-【硬核優化】CPU增強解鎖全部內核!可優化游戲性能、提升幀數!啟用CPU全內核+超線程,以更高優先級運行游戲!支持各種游戲和應用優化~

軟件介紹(文末獲取)CPUCores:游戲性能優化利器?這款工具,專為優化提升中低配電腦的幀數而生。其獨創的CPU資源調度技術,能讓老舊硬件煥發新生核心技術原理?采用「內核級隔離」方案,通過:系統進…

HQA-Attack: Toward High Quality Black-Box Hard-Label Adversarial Attack on Text

文本對抗性攻擊分為白盒攻擊和黑盒攻擊,其中黑盒攻擊更貼近現實,又可分為軟標簽和硬標簽設置,。這些名詞分別是什么意思 在文本對抗性攻擊中,“白盒攻擊”“黑盒攻擊”以及黑盒攻擊下的“軟標簽”“硬標簽”設置,核心差…