Spring框架IOC容器底層原理詳解
1、什么是IOC
IOC – Inverse of Control,控制反轉(zhuǎn),將對(duì)象的創(chuàng)建權(quán)力反轉(zhuǎn)給Spring框架!
在java當(dāng)中一個(gè)類想要使用另一個(gè)類的方法,就必須在這個(gè)類當(dāng)中創(chuàng)建這個(gè)類的對(duì)象,那么可能會(huì)出現(xiàn)如下情況, 比如A類當(dāng)中創(chuàng)建著B對(duì)象,B類當(dāng)中有C對(duì)象,C類當(dāng)中有A對(duì)象,這個(gè)如果一個(gè)類出了問(wèn)題,那么可能會(huì)導(dǎo)致這個(gè)框架出現(xiàn)問(wèn)題。 Spring 將創(chuàng)建對(duì)象的權(quán)利給了IOC,在IOC當(dāng)中創(chuàng)建了ABC三個(gè)對(duì)象嗎,那么我們我們其他的類只需要調(diào)用集合, 大大的解決了程序耦合性的問(wèn)題。
控制反轉(zhuǎn)(Inversion of Control,縮寫為IoC),是面向?qū)ο缶幊讨械囊环N設(shè)計(jì)原則,可以用來(lái)減低計(jì)算機(jī)代碼之間的耦合度。
解決問(wèn)題:使用IOC可以解決程序耦合性高的問(wèn)題。
2、IOC容器的底層原理
IOC的實(shí)現(xiàn),依賴于以下3門技術(shù)
① dom4j解析xml文檔;
② 工廠模式;
③ 采用反射設(shè)計(jì)模式創(chuàng)建對(duì)象
首先我們需要講一下什么是工廠模式

在當(dāng)前情況之下A類想要調(diào)用B類就必須自己在自己的內(nèi)部新建B類的對(duì)象,這樣的耦合度太高,那我們?nèi)绾谓档婉詈隙鹊哪兀?/p>

創(chuàng)建一個(gè)工廠類,這樣就能夠使得A和B的耦合度降低到最小值
3、那么上邊提到的三種技術(shù)如何實(shí)現(xiàn)IOC的呢
第一步:xml配置文件,配置創(chuàng)建對(duì)象
<bean id="demo" class="com.qcby.service.Demo" />
第二步:創(chuàng)建工廠類(ioc的核心原理)
public class DemoFactory {
//利用dom4j得到name所對(duì)應(yīng)的value值
public static Demo getDemo() throws Exception {
//利用dom4j得到name所對(duì)應(yīng)的value值
String value="class路徑";
//通過(guò)反射創(chuàng)建對(duì)象
Class clazz = Class.forName(value);
//返回并創(chuàng)建demo對(duì)象
return (Demo) clazz.newInstance();
}
}4、IOC(接口)
1.IOC思想是基于IOC容器完成的,IOC的底層就是對(duì)象工廠
2.Spring里邊提供了IOC容器的實(shí)現(xiàn)的兩種方式
(1) BeanFactroy:IOC容器是Spring內(nèi)部的使用接口,不提供給開(kāi)發(fā)人員使用

BeanFactroy:加載配置文件的時(shí)候不會(huì)去創(chuàng)建對(duì)象,在使用對(duì)象的時(shí)候才會(huì)去創(chuàng)建對(duì)
(2)ApplicationContext:BeanFactory接口的子接口,提供了更多更強(qiáng)大的功能,一般由開(kāi)發(fā)人員進(jìn)行使用

到此這篇關(guān)于Spring框架IOC容器底層原理詳解的文章就介紹到這了,更多相關(guān)Spring IOC容器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
spring cloud zuul 與 sentinel的結(jié)合使用操作
這篇文章主要介紹了spring cloud zuul 與 sentinel 的結(jié)合使用操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
Jmeter跨線程組傳值調(diào)用實(shí)現(xiàn)圖解
這篇文章主要介紹了Jmeter跨線程組傳值調(diào)用實(shí)現(xiàn)圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
SpringBoot啟動(dòng)流程SpringApplication準(zhǔn)備階段源碼分析
這篇文章主要為大家介紹了SpringBoot啟動(dòng)流程SpringApplication準(zhǔn)備階段源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
java 定義長(zhǎng)度為0的數(shù)組/空數(shù)組案例
這篇文章主要介紹了java 定義長(zhǎng)度為0的數(shù)組/空數(shù)組案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
SpringBoot中的ApplicationListener事件監(jiān)聽(tīng)器使用詳解
這篇文章主要介紹了SpringBoot中的ApplicationListener事件監(jiān)聽(tīng)器使用詳解,ApplicationListener是應(yīng)用程序的事件監(jiān)聽(tīng)器,繼承自java.util.EventListener標(biāo)準(zhǔn)接口,采用觀察者設(shè)計(jì)模式,需要的朋友可以參考下2023-11-11
Idea設(shè)置spring boot應(yīng)用配置參數(shù)的兩種方式
本文通過(guò)兩個(gè)方式介紹Idea設(shè)置spring boot應(yīng)用配置參數(shù),一種是配置VM options的參數(shù)時(shí)要以:-DparamName的格式設(shè)置參數(shù),第二種可以參考下本文詳細(xì)設(shè)置,感興趣的朋友跟隨小編一起看看吧2023-11-11

