3. Spring: 深入理解IoC
阿新 • • 發佈:2018-11-02
3. Spring: 深入理解IoC
IoC 是 Spring容器的核心,AOP、宣告式事務等功能都依賴於此功能
-
解耦過程例項
-
問題場景
-
解耦過程
-
IoC解耦
-
介面具體實現類的控制權從呼叫類移除,轉交到第三方決定
例如場景中:
- 控制:選擇劉建明角色扮演者的控制權
- 反轉:控制權從劇本中移除,轉交到了導演手中
-
-
-
IoC注入
-
建構函式注入
通過呼叫類的建構函式,將介面實現通過建構函式變數傳入
-
屬性注入
(用到的時候才注入,比建構函式注入節約)
-
介面注入
(增加類的數量,和屬性注入本質區別不大,所以不提倡)
-
Spring 配置示例
-
-
Java反射機制
-
ClassLoader
類裝載器就是尋找類的位元組碼檔案並構造出類在JVM內部表示的物件元件,主要工作由ClassLoader及其子類負責,ClassLoader是一個重要的Java執行時系統元件,它負責在執行時查詢和裝入Class位元組碼檔案。
-
工作機制
- 裝載:查詢和匯入Class檔案
- 連結:執行校驗,準備和解析步驟
- 初始化:對類的靜態變數,靜態程式碼塊執行初始化工作
-
ClassLoader之間的關係
public static void main(String[] args) { ClassLoader loader=Thread.currentThread().getContextClassLoader(); System.out.println("current loader: "+loader); System.out.println("parent loader: "
-
重要方法
Class loadClass(String name) //name類裝載器需要裝載的類的名字 Class defineClass(String name,byte[]b,int off ,int len)//位元組陣列裝換成java.lang.class 物件 Class findSystemClass(String name) //從本地檔案系統載入class檔案 Class findLoadedClass(String name) //檢視classloader是否已經裝入到某個類中 ClassLoader getParent()//類裝載器的父裝載器除了根裝載器 其他類裝載器都有且僅有一個父裝載器
-
-
重要的反射類
- Constructor: 類的建構函式的反射類,獲得類的所有建構函式
- Method:方法的反射類
- getReturnType()
- getParameterType()
- getExceptionType()
- getParameterAnnotations()
- Field:類的成員變數的反射類
-
Java反射與IoC的關係
-
-
資源訪問工具類
-
JDK所提供的訪問資源類並不能很好的滿足各種底層資源的訪問請求,因此Spring設計了一個Resource介面,它為應用提供了更加強大的訪問底層資源的能力。
-
資源載入機制
-
資源載入類介面
-
-
BeanFactory和ApplicationContext
-
BeanFactory是一個類工廠,可以建立管理各種類的物件,Spring稱這些建立和管理的Java物件為Bean(Spring 的基礎設施)
- 初始化順序
- 建立配置檔案
- 裝載配置檔案
- 啟動IoC容器
- 獲取Bean示例
- 初始化順序
-
ApplicationContext由BeanFactory派生而來,提供了更多面向實際應用的功能。
BeanFactory很多功能需要程式設計實現
ApplicationContext則可以通過配置的方法來實現
-