Hi,我是Mic 一個工作了4年的粉絲,在面試的時候遇到一個這樣的問題。 “介紹一下Spring IOC的工作流程” 他說回答得不是很好,希望我能幫他梳理一下。 關於這個問題,我們來看看普通人和高手的回答。 普通人: 嗯。。。。。。。。 高手: 好的,這個問題我會從幾個方面來回答。 IOC是什麼 B ...
Hi,我是Mic
一個工作了4年的粉絲,在面試的時候遇到一個這樣的問題。
“介紹一下Spring IOC的工作流程”
他說回答得不是很好,希望我能幫他梳理一下。
關於這個問題,我們來看看普通人和高手的回答。
普通人:
嗯。。。。。。。。
高手:
好的,這個問題我會從幾個方面來回答。
- IOC是什麼
- Bean的聲明方式
- IOC的工作流程
IOC的全稱是Inversion Of Control, 也就是控制反轉,它的核心思想是把對象的管理許可權交給容器。
應用程式如果需要使用到某個對象實例,直接從IOC容器中去獲取就行,這樣設計的好處是降低了程式裡面對象與對象之間的耦合性。
使得程式的整個體繫結構變得更加靈活。
Spring裡面很多方式去定義Bean,比如XML裡面的
Spring在啟動的時候,會去解析這些Bean然後保存到IOC容器裡面。
Spring IOC的工作流程大致可以分為兩個階段。
第一個階段,就是IOC容器的初始化
這個階段主要是根據程式中定義的XML或者註解等Bean的聲明方式
通過解析和載入後生成BeanDefinition,然後把BeanDefinition註冊到IOC容器。
通過註解或者xml聲明的bean都會解析得到一個BeanDefinition實體,實體中包含這個bean中定義的基本屬性。
最後把這個BeanDefinition保存到一個Map集合裡面,從而完成了IOC的初始化。
IoC容器的作用就是對這些註冊的Bean的定義信息進行處理和維護,它IoC容器控制反轉的核心。
第二個階段,完成Bean初始化及依賴註入
然後進入到第二個階段,這個階段會做兩個事情
- 通過反射針對沒有設置lazy-init屬性的單例bean進行初始化。
- 完成Bean的依賴註入。
第三個階段,Bean的使用
通常我們會通過@Autowired或者BeanFactory.getBean()從IOC容器中獲取指定的bean實例。
另外,針對設置layy-init屬性以及非單例bean的實例化,是在每次獲取bean對象的時候,調用bean的初始化方法來完成實例化的,並且Spring IOC容器不會去管理這些Bean。
以上就是我對這個問題的理解。
總結
對於工作原理或者工作流程性的問題,大家一定要註意回答的結構和節奏。
否則面試官會覺得很混亂,無法理解,導致面試的效果大打折扣。
高手的回答邏輯非常清晰,大家可以參考。
喜歡我的作品的小伙伴記得點贊和收藏加關註。
版權聲明:本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自
Mic帶你學架構
!
如果本篇文章對您有幫助,還請幫忙點個關註和贊,您的堅持是我不斷創作的動力。歡迎關註「跟著Mic學架構」公眾號公眾號獲取更多技術乾貨!