4 Spring框架 依賴注入 DI

2021-09-16 12:19:28 字數 3479 閱讀 6755

spring發展到現在遵循「約定大於配置」原則,在基本的應用配置上(如資料庫配置),建議採用xml配置方式;在業務邏輯處理上,建議採用註解方式。回顧過往,xml配置方式真的讓人又愛又恨。所以,本節通篇採用xml配置方式。

傳統應用程式設計中所說的依賴一般指「類之間的關係」,那先讓我們複習一下類之間的關係:

spring ioc容器的依賴有兩層含義:bean依賴容器容器注入bean的依賴資源

為什麼要應用依賴注入,應用依賴注入能給我們帶來哪些好處呢?

採用物件組合,bean的功能可能由幾個依賴bean的功能組合而成,其bean本身可能只提供少許功能或根本無任何功能,全部委託給依賴bean,物件組合具有動態性,能更方便的替換掉依賴bean,從而改變bean功能;

而如果採用類繼承,bean沒有依賴bean,而是採用繼承方式新增新功能,,而且功能是在編譯時就確定了,不具有動態性,而且採用類繼承導致bean與子bean之間高度耦合,難以復用。

由此可以看出,其實依賴注入只是一種裝配物件的手段,設計的類結構才是基礎,如果設計的類結構不支援依賴注入,spring ioc容器也注入不了任何東西,從而從根本上說「如何設計好類結構才是關鍵,依賴注入只是一種裝配物件手段」。

前邊ioc一章我們已經了解了bean依賴容器,那容器如何注入bean的依賴資源,spring ioc容器注入依賴資源主要有以下兩種基本實現方式:

我們已經知道注入實現方式了,接下來讓我們來看看具體配置吧。

先定義乙個汽車類

/**

* 依賴注入

* 構造方法的注入方式

*/public class car

@override

public string tostring()

}

xml配置:

汽車出來,總得有人去開車,造個人出來吧,person類:

public class person 

@override

public string tostring()

}

xml配置檔案:

/**

* 依賴注入

* set方法的注入方式

*/public class car2

public void setname(string name)

public double getprice()

public void setprice(double price)

@override

public string tostring()

}

xml配置:

測試類:

public class test01 

}

測試結果:

構造方法注入:car [name=奇瑞qq, price=2000.0]

構造方法注入:person [name=xiaoming, car=car [name=奇瑞qq, price=2000.0]]

set方法注入:car [name=賽特, price=998.0]

spring不僅能注入簡單型別資料,還能注入集合(collection、無序集合set、有序集合list)型別、陣列(array)型別、字典(map)型別資料、properties型別資料,接下來就讓我們乙個個看看如何注入這些資料型別的資料。

/**

* 複雜型別的注入

*/public class collectionbean

public void setset(setset)

public void setmap(mapmap)

public void setproperties(properties properties)

public void setlist(listlist)

@override

public string tostring()

}

xml配置:

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

哈哈呵呵嘿嘿

小雷小風小雨

set集合

root

123

測試類:

public class test05 

}

測試結果:

複雜型別注入:

collectionbean [

arrs=[哈哈, 呵呵, 嘿嘿],

list=[小雷, 小風, 小雨],

set=[set, 集合], map=, properties=

]

讓我們來總結一下依賴注入配置及簡寫形式,其實我們已經在以上部分穿插著進行簡化配置了:

1)常量值

簡寫:

常量"/>

全寫:常量

2)引用

簡寫:

ref="

引用"/>

全寫:<

ref bean="引用

"/>

1)常量值

簡寫:

常量"/>

全寫:常量property>

2)引用

簡寫:

ref="

引用"/>

全寫:<

ref bean="引用

"/>

property>

3)陣列:沒有簡寫形式

4)列表:沒有簡寫形式

5)集合:沒有簡寫形式

6)字典

簡寫:

全寫:

鍵常量值常量

7)properties:沒有簡寫形式

使用p命名空間來簡化setter注入,具體使用如下:

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

Spring框架之DI(依賴注入

di dependency injection 依賴注入 is a 是乙個,繼承。has a 有乙個,成員變數,依賴。class b 依賴 乙個物件需要使用另乙個物件 注入 通過setter方法進行另乙個物件例項設定。例如 class bookserviceimpl 模擬spring執行過程 建立s...

spring框架 DI依賴注入(二)

一 set方法的注入 1.介紹 2.展示 先寫乙個userdao介面 package com.hnpi.dao public inte ce userdao 實現這個介面的方法 package com.hnpi.dao.impl import com.hnpi.dao.userdao public ...

Spring依賴注入(DI)

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