【Java面試】介紹下Spring IoC的工作流程

来源:https://www.cnblogs.com/mic112/archive/2022/06/20/16393641.html
-Advertisement-
Play Games

Hi,我是Mic 一個工作了4年的粉絲,在面試的時候遇到一個這樣的問題。 “介紹一下Spring IOC的工作流程” 他說回答得不是很好,希望我能幫他梳理一下。 關於這個問題,我們來看看普通人和高手的回答。 普通人: 嗯。。。。。。。。 高手: 好的,這個問題我會從幾個方面來回答。 IOC是什麼 B ...


Hi,我是Mic

一個工作了4年的粉絲,在面試的時候遇到一個這樣的問題。

“介紹一下Spring IOC的工作流程”

他說回答得不是很好,希望我能幫他梳理一下。

關於這個問題,我們來看看普通人和高手的回答。

普通人:

嗯。。。。。。。。

高手:

好的,這個問題我會從幾個方面來回答。

  • IOC是什麼
  • Bean的聲明方式
  • IOC的工作流程

IOC的全稱是Inversion Of Control, 也就是控制反轉,它的核心思想是把對象的管理許可權交給容器。

應用程式如果需要使用到某個對象實例,直接從IOC容器中去獲取就行,這樣設計的好處是降低了程式裡面對象與對象之間的耦合性。

使得程式的整個體繫結構變得更加靈活。

image-20220510095942810

image-20220510100014497

Spring裡面很多方式去定義Bean,比如XML裡面的標簽、@Service、@Component、@Repository、@Configuration配置類中的@Bean註解等等。

Spring在啟動的時候,會去解析這些Bean然後保存到IOC容器裡面。

image-20220510101204396

Spring IOC的工作流程大致可以分為兩個階段。

第一個階段,就是IOC容器的初始化

這個階段主要是根據程式中定義的XML或者註解等Bean的聲明方式

通過解析和載入後生成BeanDefinition,然後把BeanDefinition註冊到IOC容器。

image-20220510121115810

通過註解或者xml聲明的bean都會解析得到一個BeanDefinition實體,實體中包含這個bean中定義的基本屬性。

最後把這個BeanDefinition保存到一個Map集合裡面,從而完成了IOC的初始化。

IoC容器的作用就是對這些註冊的Bean的定義信息進行處理和維護,它IoC容器控制反轉的核心。

第二個階段,完成Bean初始化及依賴註入

然後進入到第二個階段,這個階段會做兩個事情

  1. 通過反射針對沒有設置lazy-init屬性的單例bean進行初始化。
  2. 完成Bean的依賴註入。

image-20220510115646893

第三個階段,Bean的使用

通常我們會通過@Autowired或者BeanFactory.getBean()從IOC容器中獲取指定的bean實例。

另外,針對設置layy-init屬性以及非單例bean的實例化,是在每次獲取bean對象的時候,調用bean的初始化方法來完成實例化的,並且Spring IOC容器不會去管理這些Bean。

image-20220511103240376

以上就是我對這個問題的理解。

總結

對於工作原理或者工作流程性的問題,大家一定要註意回答的結構和節奏。

否則面試官會覺得很混亂,無法理解,導致面試的效果大打折扣。

高手的回答邏輯非常清晰,大家可以參考。

喜歡我的作品的小伙伴記得點贊和收藏加關註。

file

版權聲明:本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Mic帶你學架構
如果本篇文章對您有幫助,還請幫忙點個關註和贊,您的堅持是我不斷創作的動力。歡迎關註「跟著Mic學架構」公眾號公眾號獲取更多技術乾貨!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • HTML基本結構 HTML初識 HTML(Hyper Text Markup Language):超文本標記語言 所謂超文本,有2層含義: 它可以加入圖片、聲音、動畫、多媒體等內容(超越文本限制 ) 它可以從一個文件跳轉到另一個文件,與世界各地主機的文件連接(超級鏈接文本)。 「HTML骨架格式」 ...
  • 本章是系列文章的第七章,終於來到了鼎鼎大名的SSA,SSA是編譯器領域最偉大的發明之一,也是影響最廣的發明。 本文中的所有內容來自學習DCC888的學習筆記或者自己理解的整理,如需轉載請註明出處。周榮華@燧原科技 7.1 控制流圖回顧 對下麵的c代碼保存成7.1.cc: 1 int max(int ...
  • 1、HashSet特點 存放的元素是無序的(不保證添加元素的順序) 元素唯一(不可以重覆) 可以存null,但是只能存放1個 雖然set集合不保證添加元素的順序,但是集合中存放的元素順序其實是固定的,根據元素的hash值確定的順序 2、HashSet原理分析 HashSet底層,是藉助HashMap ...
  • 1. 演示數據 本文的所有演示數據,均是基於下方的四張表。下麵這四張表大家應該不陌生,這就是網傳50道經典MySQL面試題中使用到的幾張原表。關於下方各表之間的關聯關係,我就不給大家說明瞭,仔細觀察欄位名,應該就可以發現。 2. pandasql的使用 1)簡介 pandas中的DataFrame是 ...
  • 前言 Python是一種通用的高級編程語言。用它可以做許多事,比如開發桌面 GUI 應用程式、網站和 Web 應用程式等。 作為一種高級編程語言,Python 還可以讓你通過處理常見的編程任務來專註應用程式的核心功能。並且,編程語言的簡單語法規 則進一步簡化了代碼庫的可讀性和應用程式的可維護性。 與 ...
  • 作者:孫浩 來源:https://xiaomi-info.github.io/2020/03/02/rpc-achieve/ 引言 本文主要論述的是“RPC 實現原理”,那麼首先明確一個問題什麼是 RPC 呢?RPC 是 Remote Procedure Call 的縮寫,即,遠程過程調用。RPC ...
  • 大佬的理解->Jaca多線程(一)多線程基礎 1、線程狀態關係 2、線程的狀態分析 線程的五種狀態:創建-就緒-運行-阻塞-死亡 1.創建狀態 創建線程對象之後,尚未調用其start方法之前; 2.可運行狀態:就緒和運行 1)當調用start()方法啟動線程之後,如果cup沒有給當前線程分配資源,當 ...
  • 首先澄清一下,我用Python收集這些視頻,絕不是想做別的什麼,真的只是用來做動態壁紙,大家不要誤會!我不是那樣的人~ 這樣的不過份吧 😻 閱讀本文你需要準備 1、環境 Python pycharm # 我還給大家準備了大量的學習資料和教程,都在這個群了 # Python學習交流群 2791998 ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...