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)文章
Java實現(xiàn)經(jīng)典大富翁游戲的示例詳解
大富翁,又名地產(chǎn)大亨。是一種多人策略圖版游戲。參與者分得游戲金錢,憑運氣(擲骰子)及交易策略,買地、建樓以賺取租金。本文將通過Java實現(xiàn)這一經(jīng)典游戲,感興趣的可以跟隨小編一起學(xué)習(xí)一下2022-02-02SpringCloud中的Eureka注冊中心詳細(xì)解讀
這篇文章主要介紹了SpringCloud中的Eureka注冊中心詳細(xì)解讀,想要參與服務(wù)注冊發(fā)現(xiàn)的實例首先需要向Eureka服務(wù)器注冊信息,注冊在第一次心跳發(fā)生時提交,需要的朋友可以參考下2023-11-11Springboot ApplicationRunner的使用解讀
這篇文章主要介紹了Springboot ApplicationRunner的使用解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05mybatis中<if>標(biāo)簽bool值類型為false判斷方法
這篇文章主要給大家介紹了關(guān)于mybatis中<if>標(biāo)簽bool值類型為false判斷方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用mybatis具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08