1. 程式人生 > >Spring思維導圖(IOC篇)

Spring思維導圖(IOC篇)

包裝 new 基礎 div 區別 通過 整體 config 沒有

寫在前面

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

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

技術分享
Spring知識細節.png

控制反轉

技術分享
Spring ioc簡介.png

spring ioc容器

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

技術分享
Spring 整體結構圖.jpg

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

Spring為何如此流行?你會發現Spring解決了一個非常關鍵的問題,它可以讓你對對象之間的關系轉而用配置文件來管理,或者註解,也就是它的依賴註入機制。而這個註入關系在一個叫Ioc的容器中管理。Ioc容器就是被Bean包裹的對象。Spring正是通過把對象包裝在Bean中從而達到管理這些對象及做一些列額外操作的目的。

技術分享
ioc容器.png 技術分享
spring ioc初始化.png 技術分享
spring ioc容器工作原理.jpg

核心組件協同工作

技術分享
三大核心組件.png

BeanFactory與ApplacationContext的區別

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

技術分享
BeanFactory 與ApplacationContext.png

3種註入方式

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

  • Setter方法註入
  • 構造器註入

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

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

  下面有關spring的依賴註入,說法錯誤的是?

  A、依賴註入通常有如下兩種:設置註入和構造註入:
  B、構造註入可以在構造器中決定依賴關系的註入順序,優先依賴的優先註入
  C、當設值註入與構造註入同時存在時,先執行構造註入,再執行設值註入
  D、設值註入是指IoC容器使用屬性的setter方法來註入被依賴的實例。這種註入方式比較簡單、直觀

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

原理解析

Spring的代碼還真是不好讀,分得太細了,文字也是難以描述出來,看了別人有關的博客,貼了好多代碼,畫了好多ER圖來描述關鍵接口或類之間的關系。這麽一篇這麽長文章下來,大家也未必會認真讀代碼,看ER圖,幹脆也不跟風了。就貼了一點在我看來特關鍵的代碼,嘿嘿。

context的初始化過程

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

技術分享
ClassPathXmlApplicationContext構造方法.jpg 技術分享
refresh()方法.jpg
從時序圖來看啟動上述初始化
技術分享
容器初始化時序圖.jpg

作者:java思維導圖
鏈接:http://www.jianshu.com/p/a6144d2035a8
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。

Spring思維導圖(IOC篇)