Java Ioc詳解和實現

做者:竹竿程序員

這章咱們講Java SpringIoc控制反轉, DI依賴注入。框架

閱讀此文以前,必須深刻理解Java反射原理。dom

一、 Ioc控制反轉學習

原來類對象實例的建立都是有程序員本身經過new進行的。控制反轉以後,咱們把建立對象的功能交給Spring,到時候咱們直接用就能夠了。spa

二、 DI注入xml

class Bclass對象

{ …….blog

}get

class Aclass{源碼

 Bclass b; 

}

好比咱們須要用到Aclass的對象Aobject時候,Spring Ioc幫咱們建立了一個對象。這時候Aobject 裏面的b屬性爲空。Ioc再建立一個Bclass對象,而後經過set方法讓b屬性引用到Ioc建立的Bclass對象。

三、 模擬Ioc實現

學習一個東西的時候,若是想弄明白,最好想一想框架內部是如何實現的,若是是我作我會怎麼實現。下面我就寫一個Ioc DI的程序。

 

Spring就至關於一個Bean工廠,你寫好本身的bean,輸入配置文件,Spring就能夠幫你自動生成bean對象。

下面咱們建立一個Java工程SimulateIoc 模擬Ioc

 

dom4j包須要,用來解析XML配置文件

 

咱們先寫二個Bean。內容都同樣,只是類名不同

 

定義一個Spring配置文件,咱們起名字叫IocConfig.xml

 

下面咱們來看一下TestIoc.Java文件

 

看一下運行結果

 

經過這個文件咱們能夠看出,咱們先建立了一個BeanFactory工廠,而後經過getBean方法得到指定的Bean對象。是否是很神奇,只要經過不一樣的名字,咱們就能夠得到咱們想要的對象。BeanFactory裏面到底作了什麼那?

 

這就是整個BeanFactory實現了。

裏面不少都是處理xml的部分,咱們主要看上面的兩個標紅的地方。

Class bean = Class.forName(cls.getText());

Object obj = bean.newInstance();

Class.forName得到指定類的類類。newInstance()得到指定類的對象。

Method entryPoint = bean.getMethod(attributename, String.class);

entryPoint.invoke(obj,value);

getMethod得到指定方法的方法調用入口。而後調用invoke就會執行方法。

若是想深刻了解上面四句。能夠看看Class文件的反射機制。或者看個人另一篇文章。

 

以上Ioc DI實現過程很是簡單,並無考慮太多幹擾因素和功能。因此和Spring實現不同,可是原理都是同樣的。

項目源碼下載地址:http://pan.baidu.com/s/1pKtO5L5

相關文章
相關標籤/搜索