spring ioc原理解析

Echizen_1發表於2019-03-10

概述

Spring IOC控制反轉,分為兩個方面解釋:

  1. 控制:物件對於內部成員的控制
  2. 反轉:將之前物件管理自己內部成員,轉變為ioc容器管理,目的是接耦

IOC的好處是:

  1. 無需手動建立,拿來就用
  2. 享受單例的好處,效率高、節省空間
  3. 統一配置,方便管理


原理

spring ioc容器原理是根據Java的反射機制,獲取類的所有資訊,再通過xml或者註解配置獲取類與類之間的關係,最後根據以上資訊構建類與類之間的依賴。

容器載入bean原理如下:

  1. 根據xml、註解獲取bean的配置資訊,在容器內部建立登錄檔
  2. 根據登錄檔例項化bean,並建立bean與bean之間的依賴
  3. 將初始化的bean儲存在容器的快取中(hashmap),等待客戶端呼叫(bean的作用域為singleton,如果為property則不快取直接返回)

spring ioc原理解析

Spring容器

bean工廠分為兩種:

  1. BeanFactory,面向Spring
  2.  ApplicationContext,基於BeanFactory基礎,實現了一系列功能

兩者區別?

  1. BeanFactory初始化bean採用懶載入,在獲取的時候才建立;ApplicationContext啟動時一次性全部載入,如果配置錯誤則無法啟動容器,可以提前檢測配置正確性,當然也導致容器啟動速度慢
  2. 對於配置檔案,ApplicationContext提供了訪問URL和檔案訪問的介面
  3. ApplicationContext支援aop
  4. BeanFactory介面需手動註冊,ApplicationContext自動

容器啟動原理

web環境Spring、Spring mvc容器載入過程

對於一個web應用,部署在web容器中,容易提供一個全域性應用上下文(ServletContext),為後面的IOC容器提供宿主環境。

其次,因為web.xml中會提供有contextLoaderListener(或ContextLoaderServlet),當web容器啟動後,觸發IOC容器初始化時間,contextLoaderListener監聽到事件後,Spring將初始化一個上下文(WebApplicationContext介面),實現類為XmlWebApplicationContext(IOC容器)。 IOC初始化後,開始初始化各種servlet(DispatchServlet),以IOC容器為宿主環境進行初始化(兩者都有屬於自己的bean快取)

bean生命週期

spring ioc原理解析

Spring IOC模式與工廠模式的區別?

當需求改變,工廠模式需要手動修改;IOC是動態生成的


相關文章