真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯網站制作重慶分公司

Spring實現一個簡單的SpringIOC容器-創(chuàng)新互聯

接觸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集合中,用來在初始化容器時創(chuàng)建bean對象.


定義一個BeanFactory的接口,接口中有一個getBean(String name)方法,用來返回你想要創(chuàng)建的那個對象.


然后定義一個該接口的實現類ClassPathXmlApplicationContext.就是在這個類的構造方法中,初始化容器,通過調用ConfigManager的方法返回的Map集合,通過反射和內省一一創(chuàng)建bean對象.這里需要注意,對象的創(chuàng)建有兩個時間點,這取決與bean標簽中scope屬性的值:  

  1. 如果scope="singleton",那么對象在容器初始化時就已創(chuàng)建好,用的時候只需要去容器中取即可.
  2. 如果scope="prototype",那么容器中不保存這個bean的實例對象,每次開發(fā)者需要使用這個對象時再進行創(chuàng)建.

使用的主要知識點:

  1. dom4j解析xml文件
  2. xpath表達式(用于解析xml中的標簽)
  3. java反射機制
  4. 內省(獲取Bean屬性的set方法進行賦值)

項目結構圖及介紹如下:

       

項目需要的jar包與項目結構已經在上圖中介紹了,這個項目所能實現的功能如下:


1. IOC容器能管理對象的創(chuàng)建以及對象之間的依賴關系.


2. 能夠實現數據的自動類型轉換(借助BeanUtils).


3. 能夠實現scope="singleton"和scope="prototype"的功能,即能夠控制對象是否為單例.  

下面介紹代碼部分:

application.xml:

<?xml version="1.0" encoding="utf-8"?>

  
    
  
  
  
    
  
  
    
    
  
  

本文題目:Spring實現一個簡單的SpringIOC容器-創(chuàng)新互聯
網站地址:http://weahome.cn/article/ghjod.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部