寫在前面java
寫過java的都知道:全部的對象都必須建立;或者說:使用對象以前必須先建立。而使用ioc以後,你就能夠再也不手動建立對象,而是從ioc容器中直接獲取對象。spring
就好像咱們無需考慮對象的銷燬回收同樣,由於java垃圾回收機制幫助咱們實現了這個過程;而ioc則是讓咱們無需考慮對象的建立過程,由ioc容器幫咱們實現對象的建立、注入等過程。編程
控制反轉設計模式
spring ioc容器微信
在Spring框架中的核心組件只有三個:Core、Context和Bean。它們構建起了整個Spring的骨骼架構,沒有它們就不可能有AOP、Web等特性功能。架構
若是說在三個核心中再選出一個核心,那就非Bean莫屬了。能夠說,Spring就是面向Bean的編程,Bean在Spring中才是真正的主角。mvc
Spring爲什麼如此流行?你會發現Spring解決了一個很是關鍵的問題,它可讓你對對象之間的關係轉而用配置文件來管理,或者註解,也就是它的依賴注入機制。而這個注入關係在一個叫Ioc的容器中管理。Ioc容器就是被Bean包裹的對象。Spring正是經過把對象包裝在Bean中從而達到管理這些對象及作一些列額外操做的目的。app
核心組件協同工做框架
BeanFactory與ApplacationContext的區別學習
IOC中最核心的接口是Beanfactory提供IOC的高級服務,而ApplicationContext是創建在BeanFactory基礎之上提供抽象的面向應用的服務。
3種注入方式
在Spring框架中,依賴注入(DI)的設計模式是用來定義對象彼此間的依賴。使用xml配置bean的狀況下,它主要有兩種類型:
固然,有了註解以後,使用註解的方式更加方便快捷。即自動裝配功能實現屬性自動注入(@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);
, 該構造方法具體代碼以下。
######從時序圖來看啓動上述初始化
寫在最後
下篇文章將會寫Spring mvc的內容,一樣以思惟導圖的方式編寫。可視化學習,讓java再也不難懂。
最後的最後,歡迎關注個人微信公衆號java-mindmap,下載源文件,以及更多java思惟導圖與項目資料供你學習,每三到四天會更新一篇,帶你走進記憶腦圖的世界。
關注公衆號並回復「思惟導圖」當即下載源xmind導圖。
上篇文章閱讀