最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring學(xué)習(xí)之依賴注入的方法(三種)

 更新時(shí)間:2017年07月11日 10:58:46   作者:顏洛濱  
本篇文章主要介紹了Spring學(xué)習(xí)之依賴注入的方法(三種),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

spring框架為我們提供了三種注入方式,分別是set注入,構(gòu)造方法注入,接口注入。今天就和大家一起來學(xué)習(xí)一下

依賴注入的基本概念

依賴注入(Dependecy Injection),也稱為IoC(Invert of Control),是一種有別于傳統(tǒng)的面向?qū)ο箝_發(fā)的思想,主要用于對應(yīng)用進(jìn)行解耦。簡單的理解就是說,本來是由應(yīng)用服務(wù)自己創(chuàng)建的對象,數(shù)據(jù),交給第三方來負(fù)責(zé)創(chuàng)建,準(zhǔn)備,并且由第三方將對應(yīng)的內(nèi)容注入到應(yīng)用服務(wù)中來,從而實(shí)現(xiàn)了對象的創(chuàng)建于對象的應(yīng)用之間的解耦,通過這種方式,應(yīng)用服務(wù)可以最小程度地減少與對象實(shí)體之前的關(guān)聯(lián)(只需要使用即可,而不關(guān)心其來源,對應(yīng)的實(shí)現(xiàn)等等),從而保持了應(yīng)用服務(wù)與對象之間的弱耦合關(guān)系。

依賴注入的簡單實(shí)現(xiàn)

可能通過文字的表達(dá),對于依賴注入不是很好理解,不過,通過簡單的代碼實(shí)現(xiàn),就可以很輕松的理解了,下面通過原始的做法以及依賴注入的做法來進(jìn)行對比,來加深對依賴注入的理解

/**
* 日志服務(wù)
*/
class LogService{

  // 注意這里,這里是手動(dòng)創(chuàng)建對應(yīng)的LogDao實(shí)例對象
  private LogDao logDao = new DBLogDao(); 

  public void save(){
    logDao.save();
  }
}

/**
* 日志DAO接口
*/
interface LogDao{

  void save();
}

/**
* 日志DAO的具體實(shí)現(xiàn),將日志保存到數(shù)據(jù)庫中
*/
class DBLogDao implements LogDao{

  @Override
  public void save() {
    System.out.println("Save to Database");
  }
}

從上面的代碼中可以看到,當(dāng)需要LogDao對象的時(shí)候,是直接在服務(wù)中創(chuàng)建具體的實(shí)現(xiàn),也就是new DBLogDao(),這種方式雖然方便,但是存在一定的缺點(diǎn),比如說,當(dāng)想要切換對應(yīng)的實(shí)現(xiàn),比如說XMLLogDao的時(shí)候,就需要打開對應(yīng)的代碼,創(chuàng)建XMLLogDao對象,并且將其交給LogService;而且,如果LogDao的創(chuàng)建過程比較繁瑣的時(shí)候,LogService在這種實(shí)現(xiàn)方式中,就需要知道LogDao的實(shí)現(xiàn)過程,而這顯然是不太合理的,因?yàn)長ogService只需要知道LogDao的存在,以及使用方式即可,而并不需要知道它的創(chuàng)建過程。

接下來來看下依賴注入或者說控制反轉(zhuǎn)是怎么解決這些問題的。

class LogService{

  // 注意這里,這里并沒創(chuàng)建對應(yīng)的對象
  private LogDao logDao;

  // 通過屬性將LogDao注入到LogService中,這也就是依賴注入的來源
  // 依賴別人講所需要的對象注入進(jìn)來
  public void setLogDao(LogDao logDao) {
    this.logDao = logDao;
  }

  public void save(){
    logDao.save();
  }
}

// LogDao接口及其實(shí)現(xiàn)DBLogDao同上,這里省略

/**
* 模擬的容器類,負(fù)責(zé)創(chuàng)建各個(gè)對象,并且將對應(yīng)的依賴對象注入進(jìn)去
*/
class Container{

  public void create(){

    // 創(chuàng)建對象
    LogService logService = new LogService();
    LogDao logDao = new DBLogDao();

    // 注入LogDao對象
    logService.setLogDao(logDao);
  }
}

可能這里你會(huì)覺得說,create方法中也是手動(dòng)創(chuàng)建了DBLogDao對象,其實(shí)不然,對于create方法來說,它只是負(fù)責(zé)創(chuàng)建對象,并不管對象的用途,也就是說,這里create方法可以通過各種其他手段,比如利用反射技術(shù),再通過配置文件來配置對應(yīng)的類的信息,這樣,當(dāng)需要修改具體的實(shí)現(xiàn)的時(shí)候,只需要修改配置文件,create就會(huì)創(chuàng)建對應(yīng)的對象,并且將其注入到LogService中,而這個(gè)過程對于LogService來說是透明的,LogService只知道自己有一個(gè)LogDao的對象,而不知道,也不需要知道LogDao對象是怎么來的。也就是實(shí)現(xiàn)了創(chuàng)建與使用的解耦。

至于控制反轉(zhuǎn)名詞,其實(shí)也是很顯然的嘛,本來是LogService自己創(chuàng)建的對象,現(xiàn)在將其交給Container來創(chuàng)建了,那么創(chuàng)建對象的權(quán)限不就是反轉(zhuǎn)了嘛^_^

一般來說,依賴注入有三種方式,分別是屬性注入,也就是上面我們看到的內(nèi)容,還有一種是構(gòu)造器注入,也就是通過構(gòu)造器注入對應(yīng)的對象,還有一種不常用的接口注入,其實(shí)本質(zhì)上也是屬于屬性注入。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • sentinel流量控制框架(目錄設(shè)置)

    sentinel流量控制框架(目錄設(shè)置)

    Sentinel?是面向分布式服務(wù)架構(gòu)的高可用流量防護(hù)組件幫助開發(fā)者保障微服務(wù)的穩(wěn)定性,本文重點(diǎn)給大家介紹sentinel流量控制框架的相關(guān)知識,感興趣的朋友一起看看吧
    2022-03-03
  • java中的阻塞隊(duì)列應(yīng)用場景及代碼實(shí)例

    java中的阻塞隊(duì)列應(yīng)用場景及代碼實(shí)例

    這篇文章主要介紹了java中的阻塞隊(duì)列應(yīng)用場景及代碼實(shí)例阻塞隊(duì)列是一種特殊的隊(duì)列,它提供了線程安全的操作,并在隊(duì)列為空或滿時(shí)提供了阻塞的功能,阻塞隊(duì)列通常用于多線程場景,其中生產(chǎn)者線程向隊(duì)列中添加元素,而消費(fèi)者線程從隊(duì)列中獲取元素,需要的朋友可以參考下
    2024-01-01
  • springboot aop添加日志方式

    springboot aop添加日志方式

    這篇文章主要介紹了springboot aop添加日志方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java實(shí)現(xiàn)Token工具類進(jìn)行登錄和攔截

    Java實(shí)現(xiàn)Token工具類進(jìn)行登錄和攔截

    在應(yīng)用的登錄時(shí)需要生成token進(jìn)行驗(yàn)證,并放入信息,之后的話可以直接使用瀏覽器的session進(jìn)行登錄,本文就來利用java編寫一個(gè)token工具類,可以很方便的生成和解析token,感興趣的可以了解下
    2023-12-12
  • Spring多數(shù)據(jù)源切換失敗,發(fā)現(xiàn)與事務(wù)相關(guān)問題

    Spring多數(shù)據(jù)源切換失敗,發(fā)現(xiàn)與事務(wù)相關(guān)問題

    這篇文章主要介紹了Spring多數(shù)據(jù)源切換失敗,發(fā)現(xiàn)與事務(wù)相關(guān)問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java OOM原因以及解決方案

    Java OOM原因以及解決方案

    這篇文章主要介紹了Java OOM原因以及解決方案,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • SpringBoot+Dubbo+Zookeeper知識整合過程詳解

    SpringBoot+Dubbo+Zookeeper知識整合過程詳解

    本文首先介紹了分布式系統(tǒng)的基本概念和分類,包括單一應(yīng)用架構(gòu)、垂直應(yīng)用架構(gòu)、分布式服務(wù)架構(gòu)和流動(dòng)計(jì)算架構(gòu),通過一個(gè)完整的Spring Boot + Dubbo + Zookeeper框架搭建示例,展示了如何將這些技術(shù)整合到一個(gè)實(shí)際的項(xiàng)目中,感興趣的朋友一起看看吧
    2025-02-02
  • Java?Collections工具類中常用算法解析

    Java?Collections工具類中常用算法解析

    在軟件開發(fā)中,算法是非常重要的一部分,它們可以提供高效的數(shù)據(jù)處理和操作,這篇文章主要為大家介紹了Collections?工具類集合框架中常用算法,感興趣的可以了解一下
    2023-06-06
  • Servlet文件的上傳與下載詳解

    Servlet文件的上傳與下載詳解

    很多朋友不清楚在Servlet中怎么上傳下載文件,談到這個(gè)問題,首先需要我們掌握開發(fā)servlet的步驟,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2022-06-06
  • spring學(xué)習(xí)之@SessionAttributes實(shí)例解析

    spring學(xué)習(xí)之@SessionAttributes實(shí)例解析

    這篇文章主要介紹了spring學(xué)習(xí)之@SessionAttributes實(shí)例解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02

最新評論

云梦县| 尼勒克县| 旅游| 重庆市| 朝阳市| 海伦市| 阜宁县| 泗洪县| 达拉特旗| 吉林市| 溧水县| 吉林市| 津市市| 陆河县| 哈巴河县| 巴彦淖尔市| 洞口县| 呼和浩特市| 综艺| 远安县| 墨江| 开江县| 杭锦后旗| 武冈市| 溧阳市| 阜南县| 石台县| 深州市| 股票| 虎林市| 阳新县| 高州市| 剑川县| 德阳市| 柏乡县| 伊吾县| 博湖县| 出国| 蚌埠市| 永兴县| 吉隆县|