SpringIOC控制反轉(zhuǎn)的原理詳解
一、 IOC 的概念
Spring 的 IOC ,即控制反轉(zhuǎn)
所謂控制反轉(zhuǎn) —— 本來管理業(yè)務(wù)對象(bean)的操作是由我們程序員去做的,但是有了 Spring 核心容器后,這些 Bean 對象的創(chuàng)建和管理交給我們Spring容器去做了,也就是控制權(quán)由程序員變成了容器。
Spring 通過 Java 語言的反射機制實現(xiàn)實例化 Bean ,并建立 Bean 之間的依賴關(guān)系。
除此之外,Spring IOC 還提供 Bean 實例緩存,生命周期管理,Bean 實例代理等高級服務(wù)。
二、 高層視圖
Spring 應(yīng)用啟動時,讀取 Bean配置信息,在容器中生成注冊表,然后根據(jù)注冊表去實例化 Bean,再將實例化好的 Bean 放入 Spring 容器的 Bean 緩存池中,為上層應(yīng)用程序使用。

三、 實現(xiàn)
BeanFactory 面向 Spring 本身, ApplicationContext 面向使用 Spring 框架的開發(fā)者。
BeanFactory

BeanDefinitionRegistry 注冊表
Spring 配置的每一個 Bean 通過 BeanDefination 表示,描述了 Bean 的配置信息,BeanDefinitionRegistry 提供了向容器中注冊 BeanDefination 的方法。
BeanFactory
getBean() 從容器中獲取指定名稱的 Bean
- ListableBeanFactory : 提供訪問容器 Bean 信息的方法
- HierarchicalBeanFactory : 父子級聯(lián) ,實現(xiàn)子容器可以訪問父容器的 Bean,但是父容器不能訪問子容器的 Bean
- ConfifurableBeanFactory : 增強了IOC容器的定制性。
- SingletonBeanFactory : 允許運行時向容器中注冊單例 Bean
ApplicationContext
ApplicationContext 由 BeanFactory 派生而來,提供了更多面向?qū)嶋H應(yīng)用的功能
比如從類路徑加載配置文件等 …

四、 Bean 的作用域和生命周期
作用域
- Singleton : 單例模式,全局只有一個對象,多線程下不安全
- Prototype : 原型模式,在每次使用時創(chuàng)建,每個 Bean 有自己的屬性和狀態(tài)
- Request : 一次 Request 中一個實例
- Session
- Global Session
生命周期
- 實例化
- IOC 依賴注入
- setBeanName
- BeanFactoryAware
- ApplicationContentAware
- 接口實現(xiàn)-初始化預(yù)處理
- 初始化方法
- postProcessAfterInitialization
- 過期自動清理/自動配置清理
到此這篇關(guān)于SpringIOC控制反轉(zhuǎn)的原理詳解的文章就介紹到這了,更多相關(guān)SpringIOC控制反轉(zhuǎn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
劍指Offer之Java算法習(xí)題精講數(shù)組與字符串
跟著思路走,之后從簡單題入手,反復(fù)去看,做過之后可能會忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會發(fā)現(xiàn)質(zhì)的變化2022-03-03
Java 如何快速,優(yōu)雅的實現(xiàn)導(dǎo)出Excel
這篇文章主要介紹了Java 如何快速,優(yōu)雅的實現(xiàn)導(dǎo)出Excel,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下2021-03-03
使用idea創(chuàng)建web框架和配置struts的方法詳解
這篇文章主要介紹了使用idea創(chuàng)建web框架和配置struts的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09
基于Comparator對象集合實現(xiàn)多個條件按照優(yōu)先級的比較
這篇文章主要介紹了基于Comparator對象集合實現(xiàn)多個條件按照優(yōu)先級的比較,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
JUnit測試控制@Test執(zhí)行順序的三種方式小結(jié)
這篇文章主要介紹了JUnit測試控制@Test執(zhí)行順序的三種方式小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
java實現(xiàn)字符與Unicode碼轉(zhuǎn)換(附源碼)
在 Java 開發(fā)中,經(jīng)常需要在字符(char 或 String)與其對應(yīng)的Unicode 碼點(int)之間進(jìn)行相互轉(zhuǎn)換,下面小編就來和大家詳細(xì)介紹一下具體實現(xiàn)方法吧2025-07-07

