javascript
Spring 依赖注入的实现
依賴注入(Dependency Injection,DI)和控制反轉(zhuǎn)含義相同,它們是從兩個角度描述的同一個概念。
當(dāng)某個 Java 實(shí)例需要另一個 Java 實(shí)例時,傳統(tǒng)的方法是由調(diào)用者創(chuàng)建被調(diào)用者的實(shí)例(例如,使用 new 關(guān)鍵字獲得被調(diào)用者實(shí)例),而使用 Spring 框架后,被調(diào)用者的實(shí)例不再由調(diào)用者創(chuàng)建,而是由 Spring 容器創(chuàng)建,這稱為控制反轉(zhuǎn)。
Spring 容器在創(chuàng)建被調(diào)用者的實(shí)例時,會自動將調(diào)用者需要的對象實(shí)例注入給調(diào)用者,這樣,調(diào)用者通過 Spring 容器獲得被調(diào)用者實(shí)例,這稱為依賴注入。
依賴注入主要有兩種實(shí)現(xiàn)方式,分別是屬性 setter 注入和構(gòu)造方法注入。具體介紹如下。
1 屬性 setter 注入
指 IoC 容器使用 setter 方法注入被依賴的實(shí)例。通過調(diào)用無參構(gòu)造器或無參 static 工廠方法實(shí)例化 bean 后,調(diào)用該 bean 的 setter 方法,即可實(shí)現(xiàn)基于 setter 的 DI。
2 構(gòu)造方法注入
指 IoC 容器使用構(gòu)造方法注入被依賴的實(shí)例。基于構(gòu)造器的 DI 通過調(diào)用帶參數(shù)的構(gòu)造方法實(shí)現(xiàn),每個參數(shù)代表一個依賴。
下面通過屬性 setter 注入的案例演示 Spring 容器是如何實(shí)現(xiàn)依賴注入的。步驟如下。
1. 創(chuàng)建 PersonService 接口
在 spring 項(xiàng)目的 com.zsh包下創(chuàng)建一個名為 PersonService 的接口,該接口中包含一個 addPerson() 方法,如下所示。
在 com.zsh 包下創(chuàng)建一個名為 PersonServiceImpl 的類,該類實(shí)現(xiàn)了 PersonService 接口,如下所示。
上述代碼中,首先聲明了 personDao 對象,并為其添加 setter 方法,用于依賴注入,然后實(shí)現(xiàn)了 PersonDao 接口的 addPerson() 方法,并在方法中調(diào)用 save() 方法和輸出一條語句。
3. 在 applicationContext.xml 中添加配置信息
在 applicationContext.xml 配置文件中添加一個 元素,用于實(shí)例化 PersonServiceImpl 類,并將 personDao 的實(shí)例注入到 personService 中,代碼如下:
4. 編寫測試方法
在 FirstTest 類中創(chuàng)建一個名為 test() 的方法,編輯后如下所示:
5. 運(yùn)行項(xiàng)目并查看結(jié)果
使用 JUnit 測試運(yùn)行 test() 方法,運(yùn)行成功后,控制臺的輸出結(jié)果如下圖所示。
從輸出結(jié)果中可以看出,使用 Spring 容器獲取 userService 的實(shí)例后,調(diào)用了該實(shí)例的 addPerson() 方法,在該方法中又調(diào)用了 PersonDao 實(shí)現(xiàn)類中的 add() 方法,并輸出了結(jié)果。這就是 Spring 容器屬性 setter 注入的方式。
總結(jié)
以上是生活随笔為你收集整理的Spring 依赖注入的实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Boot 之 itext导
- 下一篇: Spring Boot 数据国际化