Spring的DI依賴實現分析

2021-08-27 13:30:18 字數 2347 閱讀 2736

di(依賴注入)是spring最底層的核心容器要實現的功能之一,利用di可以實現程式功能的控制反轉(控制反轉即程式之間之間的依賴關係不再由程式設計師來負責,而是由spring容器來負責)

乙個簡單的例子(di例子)

乙個介面的源**(表示乙個人說話)

package com.pp;

public inte***ce saysentence

乙個類實現了上面的介面,表示要說的一句具體話

package com.pp;

public class person

public person(){}

public sentence getsce()

public void setsce(sentence sce)

public string getname()

public void setname(string name)

public void say()

}

spring的配置檔案(person.xml)

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

測試的源**

package com.pp;

import org.springframework.beans.factory.beanfactory;

import org.springframework.beans.factory.xml.xmlbeanfactory;

import org.springframework.core.io.classpathresource;

public class maintest

}

看到上面的,你應該也了解了什麼是ioc,什麼是di,可是我想分析的不是這,這真的很簡單,我想分析就是這個di是怎麼實現的:)下面**,只是摘錄,太多了,只貼出幾個關鍵函式,有興趣的,可以共同分析

//載入的bean定義

//引數是乙個資源檔案,這個資源檔案指定了編碼方式

//返回值是配置檔案中的bean定義個數

public int loadbeandefinitions(encodedresource encodedresource) throws beandefinitionstoreexception

//獲取當前執行緒裡的threadlocal裡的變數集合

setcurrentresources = this.resourcescurrentlybeingloaded.get();

if (currentresources == null)

//將encoderesource填加到當前執行緒的區域性變數集合中

if (!currentresources.add(encodedresource))

try

return doloadbeandefinitions(inputsource, encodedresource.getresource());

}finally

} catch (ioexception ex)

finally

} }

上面這個函式最關鍵的部分是doloadbeandefinitions這個函式,看看它的源**

//真正的從指定的xml檔案中載入bean的定義

protected int doloadbeandefinitions(inputsource inputsource, resource resource)

throws beandefinitionstoreexception

catch (beandefinitionstoreexception ex)

catch (saxparseexception ex)

catch (saxexception ex)

catch (parserconfigurationexception ex)

catch (ioexception ex)

catch (throwable ex)

}

這個函式最關鍵部分是這個registerbeandefinitions,跟蹤到裡面,略去源**,直接分析其最核心的**registerbeandefinitions

核心原始碼如下

public void registerbeandefinitions(document doc, xmlreadercontext readercontext)

未完,待續

Spring依賴注入(DI)

在spring框架中,依賴注入 di 的設計模式是用來定義物件彼此間的依賴。它主要有兩種型別 這是最流行最簡單的di注入方法,通過設定方法注入依賴。示例 幫助器類和指定的setter方法 package com.yiibai.output import com.yiibai.output.ioutp...

Spring依賴注入 DI

在我們的pojo類中需要get和set方法 public class student public void setname string name public address getaddress public void setaddress address address public str...

spring學習之DI依賴注入

何為di 傳統的物件與物件的呼叫,使得以後修改 變得困難,在spring得ioc控制反轉下,使得在上層呼叫下層的耦合性得到了緩解,不過還是得使用getbean方法去獲得,di的依賴注入,使得spring容器直接在xml檔案中配置,動態的使得物件與物件之間的注入關係變成動態行為,即spring框架負責...