1. 程式人生 > >Spring 思維導圖,讓 Spring 不再難懂(ioc 篇)

Spring 思維導圖,讓 Spring 不再難懂(ioc 篇)

寫過java的都知道:所有的物件都必須建立;或者說:使用物件之前必須先建立。而使用ioc之後,你就可以不再手動建立物件,而是從ioc容器中直接獲取物件。

就好像我們無需考慮物件的銷燬回收一樣,因為java垃圾回收機制幫助我們實現了這個過程;而ioc則是讓我們無需考慮物件的建立過程,由ioc容器幫我們實現物件的建立、注入等過程。

控制反轉

spring ioc容器

在Spring框架中的核心元件只有三個:Core、Context和Bean。它們構建起了整個Spring的骨骼架構,沒有它們就不可能有AOP、Web等特性功能。

如果說在三個核心中再選出一個核心,那就非Bean莫屬了。可以說,Spring就是面向Bean的程式設計,Bean在Spring中才是真正的主角。

Spring為何如此流行?你會發現Spring解決了一個非常關鍵的問題,它可以讓你對物件之間的關係轉而用配置檔案來管理,或者註解,也就是它的依賴注入機制。

而這個注入關係在一個叫Ioc的容器中管理。Ioc容器就是被Bean包裹的物件。Spring正是通過把物件包裝在Bean中從而達到管理這些物件及做一些列額外操作的目的。

核心元件協同工作

BeanFactory 與 ApplacationContext 的區別

IOC中最核心的介面是Beanfactory提供IOC的高階服務,而ApplicationContext是建立在BeanFactory基礎之上提供抽象的面向應用的服務。

3 種注入方式

在Spring框架中,依賴注入(DI)的設計模式是用來定義物件彼此間的依賴。使用xml配置bean的情況下,它主要有兩種型別:

- Setter方法注入

- 構造器注入

當然,有了註解之後,使用註解的方式更加方便快捷。即自動裝配功能實現屬性自動注入(@autowire)。

寫到這裡,讓我想起了最近在牛客網上看的一道選擇題了:

牛客網給出的答案是選C,不過網友們好像對答案有不同的意見哈。檢視網友評論及答案

(https://www.nowcoder.com/questionTerminal/a1644e2668f94ab78bfefa38808fb006)

原理解析

Spring的程式碼還真是不好讀,分得太細了,文字也是難以描述出來,看了別人有關的部落格,貼了好多程式碼,畫了好多ER圖來描述關鍵介面或類之間的關係。

這麼一篇這麼長文章下來,大家也未必會認真讀程式碼,看ER圖,乾脆也不跟風了。就貼了一點在我看來特關鍵的程式碼,嘿嘿。

context 的初始化過程

當執行ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); 構造方法ClassPathXmlApplicationContext(String configLocation)呼叫了this(new String[] {configLocation}, true, null);, 該構造方法具體程式碼如下。

從時序圖來看啟動上述初始化