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