Spring?IOC容器使用詳細(xì)講解
Spring IOC
IOC思想
IOC:Inversion of Control,翻譯過來是反轉(zhuǎn)控制。
獲取資源的傳統(tǒng)方式
必須清楚了解資源創(chuàng)建整個(gè)過程中的全部細(xì)節(jié)且熟練掌握
在應(yīng)用程序中的組件需要獲取資源時(shí),傳統(tǒng)的方式是組件主動(dòng)的從容器中獲取所需要的資源,在這樣的模式下開發(fā)人員往往需要知道在具體容器中特定資源的獲取方式,增加了學(xué)習(xí)成本,同時(shí)降低了開發(fā)效率。
反轉(zhuǎn)控制方式獲取資源
不必關(guān)心資源創(chuàng)建過程的所有細(xì)節(jié)。
反轉(zhuǎn)控制的思想完全顛覆了應(yīng)用程序組件獲取資源的傳統(tǒng)方式:反轉(zhuǎn)了資源的獲取方式——改由容器主動(dòng)的將資源推送給需要的組件,開發(fā)人員不需要知道容器是如何創(chuàng)建資源對(duì)象的,只需要提供接收資源的方式即可,極大的降低了學(xué)習(xí)成本,提高了開發(fā)的效率。這種行為也稱為查找的被動(dòng)形式。
DI依賴注入
DI:Dependency Injection,翻譯過來是依賴注入。
DI 是 IOC 的另一種表述方式:即組件以一些預(yù)先定義好的方式(例如:setter 方法)接受來自于容器的資源注入。相對(duì)于IOC而言,這種表述更直接。
所以結(jié)論是:IOC 就是一種反轉(zhuǎn)控制的思想, 而 DI 是對(duì) IOC 的一種具體實(shí)現(xiàn)。
IOC容器在Spring中的實(shí)現(xiàn)
? Spring 的 IOC 容器就是 IOC 思想的一個(gè)落地的產(chǎn)品實(shí)現(xiàn)。IOC 容器中管理的組件也叫做 bean
。在創(chuàng)建bean
之前,首先需要?jiǎng)?chuàng)建 IOC 容器。
Spring 提供了 IOC 容器的兩種實(shí)現(xiàn)方式:
BeanFactory
這是 IOC 容器的基本實(shí)現(xiàn),是 Spring 內(nèi)部使用的接口。面向 Spring 本身,不提供給開發(fā)人員使用。
ApplicationContext
BeanFactory
的子接口,提供了更多高級(jí)特性。面向 Spring 的使用者,幾乎所有場(chǎng)合都使用 ApplicationContext
而不是底層的 BeanFactory
。
ApplicationContext的主要實(shí)現(xiàn)類
類型名簡(jiǎn)介 | 簡(jiǎn)介 |
---|---|
ClassPathXmlApplicationContext | 通過讀取類路徑下的 XML 格式的配置文件創(chuàng)建 的IOC 容器 對(duì)象 |
FileSystemXmlApplicationContext | 通過文件系統(tǒng)路徑讀取 XML 格式的配置文件創(chuàng)建 IOC 容 器對(duì)象 |
ConfigurableApplicationContext | ApplicationContext 的子接口,包含一些擴(kuò)展方法 refresh() 和 close() ,讓 ApplicationContext 具有啟動(dòng)、 關(guān)閉和刷新上下文的能力。 |
WebApplicationContext | 專門為 Web 應(yīng)用準(zhǔn)備,基于 Web 環(huán)境創(chuàng)建 IOC 容器對(duì) 象,并將對(duì)象引入存入 ServletContext 域中。 |
ClassPathXmlApplicationContext獲取Bean
讀取類路徑下的 XML 格式的配置文件創(chuàng)建的 IOC 容器對(duì)象
創(chuàng)建bean測(cè)試
/** * Created by KingsLanding on 2022/7/31 18:37 */ public class HelloWorldSpring { public void satHello(){ System.out.println("hello World Spring ioc"); } }
在Spring的配置文件中配置bean
通過bean標(biāo)簽配置IOC容器所管理的bean
- id:設(shè)置bean的唯一標(biāo)識(shí)
- class:設(shè)置bean所對(duì)應(yīng)類型的全類名
<!-- 配置HelloWorldSpring 所對(duì)應(yīng)的bean,即將HelloWorldSpring 的對(duì)象交給Spring的IOC容器管理 --> <bean id="helloWorld" class="com.spring.pojo.HelloWorldSpring"></bean>
測(cè)試結(jié)果
@Test public void testHello(){ //獲取IOC容器 ApplicationContext ioc = new ClassPathXmlApplicationContext("HelloSpring.xml"); HelloWorldSpring helloWorld = (HelloWorldSpring) ioc.getBean("helloWorld"); helloWorld.satHello(); }
到此這篇關(guān)于Spring IOC容器使用詳細(xì)講解的文章就介紹到這了,更多相關(guān)Spring IOC容器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringMVC 跨重定向請(qǐng)求傳遞數(shù)據(jù)的方法實(shí)現(xiàn)
這篇文章主要介紹了SpringMVC 跨重定向請(qǐng)求傳遞數(shù)據(jù)的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06Spring Boot+Jpa多數(shù)據(jù)源配置的完整步驟
這篇文章主要給大家介紹了關(guān)于Spring Boot+Jpa多數(shù)據(jù)源配置的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01基于Java的電梯系統(tǒng)實(shí)現(xiàn)過程
這篇文章主要介紹了基于Java的電梯系統(tǒng)實(shí)現(xiàn)過程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10springboot自定義starter實(shí)現(xiàn)過程圖解
這篇文章主要介紹了springboot自定義starter實(shí)現(xiàn)過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02基于SpringBoot和Leaflet的行政區(qū)劃地圖掩膜效果實(shí)戰(zhàn)教程
本文講解的是一種圖層級(jí)的掩膜,即使用行政區(qū)劃圖層來進(jìn)行掩膜,使用場(chǎng)景為,用戶只需要在地圖頁面中展示目標(biāo)行政區(qū)劃內(nèi)的影像信息,對(duì)于行政邊界外的影像,這篇文章主要介紹了基于SpringBoot和Leaflet的行政區(qū)劃地圖掩膜效果實(shí)戰(zhàn),需要的朋友可以參考下2024-05-05J2SE基礎(chǔ)之下載eclipse并創(chuàng)建項(xiàng)目
本文給大家介紹的是最流行的java 集成開發(fā)環(huán)境IDE eclipse的使用方法,非常的簡(jiǎn)單,有需要的小伙伴可以參考下2016-05-05說說字符串轉(zhuǎn) OffSetDateTime 你真的會(huì)用嗎
這篇文章主要介紹了字符串轉(zhuǎn) OffSetDateTime 你真的會(huì)用嗎?具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08老生常談spring boot 1.5.4 日志管理(必看篇)
下面小編就為大家?guī)硪黄仙U剆pring boot 1.5.4 日志管理(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06