寫過java的都知道:所有的對象都必須創(chuàng)建切厘;或者說:使用對象之前必須先創(chuàng)建源梭。而使用ioc之后,你就可以不再手動創(chuàng)建對象益眉,而是從ioc容器中直接獲取對象啥刻。
就好像我們無需考慮對象的銷毀回收一樣识埋,因為java垃圾回收機制幫助我們實現(xiàn)了這個過程;而ioc則是讓我們無需考慮對象的創(chuàng)建過程唧席,由ioc容器幫我們實現(xiàn)對象的創(chuàng)建擦盾、注入等過程。
控制反轉
spring ioc容器
在Spring框架中的核心組件只有三個:Core淌哟、Context和Bean厌衙。它們構建起了整個Spring的骨骼架構,沒有它們就不可能有AOP绞绒、Web等特性功能婶希。
如果說在三個核心中再選出一個核心,那就非Bean莫屬了蓬衡∮麒荆可以說,Spring就是面向Bean的編程狰晚,Bean在Spring中才是真正的主角筒饰。
Spring為何如此流行?你會發(fā)現(xiàn)Spring解決了一個非常關鍵的問題壁晒,它可以讓你對對象之間的關系轉而用配置文件來管理瓷们,或者注解,也就是它的依賴注入機制秒咐。而這個注入關系在一個叫Ioc的容器中管理谬晕。Ioc容器就是被Bean包裹的對象。Spring正是通過把對象包裝在Bean中從而達到管理這些對象及做一些列額外操作的目的携取。
核心組件協(xié)同工作
BeanFactory與ApplacationContext的區(qū)別
IOC中最核心的接口是Beanfactory提供IOC的高級服務,而ApplicationContext是建立在BeanFactory基礎之上提供抽象的面向應用的服務攒钳。
3種注入方式
在Spring框架中,依賴注入(DI)的設計模式是用來定義對象彼此間的依賴雷滋。使用xml配置bean的情況下不撑,它主要有兩種類型:
- Setter方法注入
- 構造器注入
當然,有了注解之后晤斩,使用注解的方式更加方便快捷焕檬。即自動裝配功能實現(xiàn)屬性自動注入(@autowire)。
寫到這里澳泵,讓我想起了最近在攀涤蓿客網(wǎng)上看的一道選擇題了:
下面有關spring的依賴注入,說法錯誤的是?
A爆侣、依賴注入通常有如下兩種:設置注入和構造注入:
B萍程、構造注入可以在構造器中決定依賴關系的注入順序,優(yōu)先依賴的優(yōu)先注
C兔仰、當設值注入與構造注入同時存在時茫负,先執(zhí)行構造注入,再執(zhí)行設值注入
D乎赴、設值注入是指IoC容器使用屬性的setter方法來注入被依賴的實例忍法。這種注入方式比較簡單、直觀
砰藕穑客網(wǎng)給出的答案是選C饿序,不過網(wǎng)友們好像對答案有不同的意見哈。查看網(wǎng)友評論及答案
原理解析
Spring的代碼還真是不好讀羹蚣,分得太細了原探,文字也是難以描述出來,看了別人有關的博客顽素,貼了好多代碼咽弦,畫了好多ER圖來描述關鍵接口或類之間的關系。這么一篇這么長文章下來胁出,大家也未必會認真讀代碼型型,看ER圖,干脆也不跟風了全蝶。就貼了一點在我看來特關鍵的代碼闹蒜,嘿嘿。
context的初始化過程
當運行
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
構造方法ClassPathXmlApplicationContext(String configLocation)
調用了this(new String[] {configLocation}, true, null);
該構造方法具體代碼如下抑淫。