Spring 原理
它是一個全面的、企業應用開發一站式的解決方案,貫穿表現層、業務層、持久層。但是 Spring 仍然可以和其他的框架無縫整合。
Spring 特點
1. 輕量級
2. 控制反轉
3. 面向切面
4. 容器
5. 框架集合
Spring 核心元件
Spring 常用模組
Spring 主要包
Spring 常用註解
Spring IOC 原理
概念
Spring 通過一個組態檔描述 Bean 及 Bean 之間的依賴關係,利用 Java 語言的反射功能範例化 Bean 並建立 Bean 之間的依賴關係。 Spring 的 IoC 容器在完成這些底層工作的基礎上,還提供 了 Bean 範例快取、生命週期管理、 Bean 範例代理、事件釋出、資源裝載等高階服務。
Spring 容器高層檢視
Spring 啟動時讀取應用程式提供的 Bean 設定資訊,並在 Spring 容器中生成一份相應的 Bean 配 置登入檔,然後根據這張登入檔範例化 Bean,裝配好 Bean 之間的依賴關係,為上層應用提供準 備就緒的執行環境。其中 Bean 快取池為 HashMap 實現
IOC 容器實現
BeanFactory-框架基礎設施
BeanFactory 是 Spring 框架的基礎設施,面向 Spring 本身;ApplicationContext 面向使用 Spring 框架的開發者,幾乎所有的應用場合我們都直接使用 ApplicationContext 而非底層 的 BeanFactory。
ApplicationContext 面向開發應用
ApplicationContext 由 BeanFactory 派 生 而 來 , 提 供 了 更 多 面 向 實 際 應 用 的 功 能 。 ApplicationContext 繼承了 HierarchicalBeanFactory 和 ListableBeanFactory 介面,在此基礎 上,還通過多個其他的介面擴充套件了 BeanFactory 的功能:
WebApplication 體系架構
WebApplicationContext 是專門為 Web 應用準備的,它允許從相對於 Web 根目錄的 路徑中裝載組態檔完成初始化工作。從 WebApplicationContext 中可以獲得 ServletContext 的參照,整個 Web 應用上下文物件將作為屬性放置到 ServletContext 中,以便 Web 應用環境可以存取 Spring 應用上下文。
範例化
Spring Bean 生命週期
範例化一個 Bean,也就是我們常說的 new。
IOC 依賴注入
按照 Spring 上下文對範例化的 Bean 進行設定,也就是 IOC 注入。
setBeanName 實現
如果這個 Bean 已經實現了 BeanNameAware 介面,會呼叫它實現的 setBeanName(String) 方法,此處傳遞的就是 Spring 組態檔中 Bean 的 id 值
BeanFactoryAware 實現
如果這個 Bean 已經實現了 BeanFactoryAware 介面,會呼叫它實現的 setBeanFactory, setBeanFactory(BeanFactory)傳遞的是 Spring 工廠自身(可以用這個方式來獲取其它 Bean, 只需在 Spring 組態檔中設定一個普通的 Bean 就可以)
ApplicationContextAware 實現
如果這個 Bean 已經實現了 ApplicationContextAware 介面,會呼叫 setApplicationContext(ApplicationContext)方法,傳入 Spring 上下文(同樣這個方式也 可以實現步驟 4 的內容,但比 4 更好,因為 ApplicationContext 是 BeanFactory 的子接 口,有更多的實現方法)
postProcessBeforeInitialization 介面實現-初始化預處理
. 如果這個 Bean 關聯了 BeanPostProcessor 介面,將會呼叫 postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor 經常被用 作是 Bean 內容的更改,並且由於這個是在 Bean 初始化結束時呼叫那個的方法,也可以被應 用於記憶體或快取技術。
init-method
如果 Bean 在 Spring 組態檔中設定了 init-method 屬性會自動呼叫其設定的初始化方法。
postProcessAfterInitialization
如果這個 Bean 關聯了 BeanPostProcessor 介面,將會呼叫 postProcessAfterInitialization(Object obj, String s)方法。 注:以上工作完成以後就可以應用這個 Bean 了,那這個 Bean 是一個 Singleton 的,所以一 般情況下我們呼叫同一個 id 的 Bean 會是在內容地址相同的範例,當然在 Spring 組態檔中 也可以設定非 Singleton。
Destroy 過期自動清理階段
當 Bean 不再需要時,會經過清理階段,如果 Bean 實現了 DisposableBean 這個介面,會調 用那個其實現的 destroy()方法;
destroy-method 自設定清理
最後,如果這個 Bean 的 Spring 設定中設定了 destroy-method 屬性,會自動呼叫其設定的 銷燬方法。
bean 標籤有兩個重要的屬性(init-method 和 destroy-method)。用它們你可以自己客製化 初始化和登出方法。它們也有相應的註解(@PostConstruct 和@PreDestroy)。
需要這份pdf檔案的朋友們關注點贊後