接觸Spring快半年了,前段時間剛用Spring4+S2H4做完了自己的畢設,但是很明顯感覺對Spring尤其是IOC容器的實現原理理解的不到位,說白了,就是僅僅停留在會用的階段,有一顆想讀源碼的心于是買了一本計文柯的《Spring技術內幕》,第二章沒看完,就被我扔一邊了,看的那是相當痛苦,深深覺得自己資質尚淺,能力還不夠,昨天在網上碰巧看到一個實現簡單的SpringIOC容器的視頻教程,于是跟著做了一遍,竟然相當順利,至少每一行代碼都能理解,于是細心整理了一番,放在這里.
站在用戶的角度思考問題,與客戶深入溝通,找到忻州網站設計與忻州網站推廣的解決方案,憑借多年的經驗,讓設計與互聯網技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網站設計制作、做網站、企業(yè)官網、英文網站、手機端網站、網站推廣、域名注冊、虛擬主機、企業(yè)郵箱。業(yè)務覆蓋忻州地區(qū)。主要思想:
提到IOC,第一反應就是控制反轉,我以前以為SpringIOC就是控制反轉,控制反轉就是SpringIOC,當然這種理解是錯誤的,控制反轉是一種思想,一種模式,而Spring的IOC容器是實現了這種思想這種模式的一個載體.
使用過Spring的人都熟知,SpringIOC容器可以在對象生成或初始化時就直接將數據注入到對象中,如果對象A的屬性是另一個對象B,還可以將這個對象B的引用注入到注入到A的數據域中.
如果在初始化對象A的時候,對象B還沒有進行初始化,而A又需要對象B作為自己的屬性,那么就會用一種遞歸的方式進行注入,這樣就可以把對象的依賴關系清晰有序的建立起來.
IOC容器解決問題的核心就是把創(chuàng)建和管理對象的控制權從具體的業(yè)務對象手中搶過來.由IOC容器來管理對象之間的依賴關系,并由IOC容器完成對象的注入.這樣就把應用從復雜的對象依賴關系的管理中解放出來,簡化了程序的開發(fā)過程.
下圖是這個簡單IOC容器的類圖(原諒我真沒學過UML,湊合看吧):
程序中所有的Bean之間的依賴關系我們是放在一個xml文件中進行維護的,就是applicationContext.xml
ConfigManager類完成的功能是讀取xml,并將所有讀取到有用的信息封裝到我們創(chuàng)建的一個Map
定義一個BeanFactory的接口,接口中有一個getBean(String name)方法,用來返回你想要創(chuàng)建的那個對象.
然后定義一個該接口的實現類ClassPathXmlApplicationContext.就是在這個類的構造方法中,初始化容器,通過調用ConfigManager的方法返回的Map集合,通過反射和內省一一創(chuàng)建bean對象.這里需要注意,對象的創(chuàng)建有兩個時間點,這取決與bean標簽中scope屬性的值:
使用的主要知識點:
項目結構圖及介紹如下:
項目需要的jar包與項目結構已經在上圖中介紹了,這個項目所能實現的功能如下:
1. IOC容器能管理對象的創(chuàng)建以及對象之間的依賴關系.
2. 能夠實現數據的自動類型轉換(借助BeanUtils).
3. 能夠實現scope="singleton"和scope="prototype"的功能,即能夠控制對象是否為單例.
下面介紹代碼部分:
application.xml:
<?xml version="1.0" encoding="utf-8"?>