天天看點

3.Spring IOC了解

  1. Spring架構圖

    其中spring-core包含依賴注入IOC與DI的最基本實作,spring-context包含IOC容器主要設計。

    3.Spring IOC了解
  2. Spring IOC接口設計
    3.Spring IOC了解
  • BeanFactory定義了IOC容器的最基礎規範,包含了getBean(),getBeanProvider(),containBean(),getType(),getAlias()等IOC容器的基本方法。
  • ApplicationContext是Spring提供的一個進階的IOC容器,主要提供IOC容器的基本功能及資訊源實作國際化(MessageSource接口),通路資源(ResourcePatternResolver接口),應用事件(ApplicationEventPublisher接口)。
在spring IOC容器的代表就是org.springframework.beans包中的BeanFactory接口,BeanFactory接口提供了IOC容器最基本功能,而org.springframework.context包下的ApplicationContext接口擴充了BeanFactory,還提供了與Spring AOP內建,國際化處理,事件傳播及提供不同層次的context實作。簡單說,BeanFactory提供了IOC容器最基本功能,而ApplicationContext則增加了更多支援企業級功能支援。ApplicationContext完全繼承BeanFactory,因而BeanFactory所具有的語義也适用于ApplicationContext
  1. 什麼是IOC及DI
  • IOC(控制反轉)就是把原先我們代碼裡面需要實作的對象建立(new)、依賴的代碼,反轉給容器來幫忙實作。它就是一個專門用來建立對象的工廠,你要什麼對象,它就給你什麼對象,有了 IOC容器,依賴關系就變了,原先的依賴關系就沒了,它們都依賴IOC容器了,通過IOC容器來建立它們之間的關系。使我們設計出松耦合、更優良的程式。
所謂IOC,對于spring架構來說,就是由spring來負責控制對象的生命周期和對象間的關系。
  • DI(依賴注入)元件之間依賴關系由容器在運作期決定。由容器動态的将某個依賴關系注入到元件之中。依賴注入的目的并非為軟體系統帶來更多功能,而是為了提升元件重用的頻率,并為系統搭建一個靈活、可擴充的平台。通過依賴注入機制,我們隻需要通過簡單的配置,而無需任何代碼就可指定目标需要的資源,完成自身的業務邏輯,而不需要關心具體的資源來自何處,由誰實作。

    了解DI的關鍵是:“誰依賴誰,為什麼需要依賴,誰注入誰,注入了什麼”:

誰依賴誰:應用程式依賴于IOC容器。

為什麼需要依賴:應用程式需要IOC容器來提供對象需要的外部資源。

誰注入誰:IOC容器注入應用程式某個對象,應用程式依賴的對象。

注入了什麼:注入某個對象所需要的外部資源(包括對象、資源、常量資料)。

  1. 為什麼不用工廠模式而使用IOC

1)本質上還是因為IOC是通過反射機制來實作的。當我們的需求出現變動時,工廠模式會需要進行相應的變化。但是IOC的反射機制允許我們不重新編譯代碼,因為它的對象都是動态生成的。

2)工廠模式修改後需要停止JVM後重新啟動,IOC實作在XML中配置,XML改了spring就立刻發覺你改動了XML重新讀一遍XML就會用你的新改動了(熱插拔)。