国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

什么是IoC?什么是Spring IoC?什么是DI?

這篇具有很好參考價(jià)值的文章主要介紹了什么是IoC?什么是Spring IoC?什么是DI?。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

首先說(shuō)明 IoC 是一種思想,IoC的全稱是Inversion of Control,翻譯成中文叫做“控制反轉(zhuǎn)”

用人話來(lái)說(shuō),IoC的思想就是將一個(gè)對(duì)象對(duì)另一個(gè)對(duì)象的控制權(quán)交出去(不必關(guān)心交給誰(shuí)),從而讓對(duì)象之間的依賴關(guān)系降低,降低代碼之間耦合程度。

我們可以寫(xiě)一個(gè)簡(jiǎn)單的代碼來(lái)舉個(gè)例子

假如說(shuō)我們現(xiàn)在要“造一臺(tái)車(chē)”,那么我們首先需要一個(gè)車(chē)框架

public class Car {
    FrameWork frameWork;

    public Car(){
        frameWork.init();
    }
}

那么造好了車(chē)框架,我們需要在車(chē)框架上面安裝一個(gè)底盤(pán)

public class FrameWork {
    Bottom bottom;

    public FrameWork(){
        bottom = new Bottom();
        bottom.init();
    }

    public void init(){
        System.out.println("i am framework......");
    }
}

那么造好了底盤(pán),我們需要在底盤(pán)合適的位置安裝好輪胎

public class Bottom {
    Tire tire;
    
    public Bottom(){
        tire = new Tire();
        tire.init();
    }
    
    public void init(){
        System.out.println("i am framework......");
    }
}

最后我們需要把輪胎造好,那么這輛車(chē)就拼裝完成了

public class Tire {
    public void init(){
        System.out.println("i am tire......");
    }
}

假設(shè)我們有一天想要一輛定制的車(chē),比如我想要一輛輪胎是17寸大小的車(chē),那么我就需要傳遞參數(shù)將代碼進(jìn)行修改

//輪胎
public class Tire {
    
    int size;
    
    public Tire(int size){
        this.size = size;
    }
    
    public void init(){
        System.out.println("i am " + size + "tire......");
    }
}

//底盤(pán)
public class Bottom {
    Tire tire;

    public Bottom(int size){
        tire = new Tire(size);
        tire.init();
    }

    public void init(){
        System.out.println("i am framework......");
    }
}

//框架
public class FrameWork {
    Bottom bottom;

    public FrameWork(int size){
        bottom = new Bottom(size);
        bottom.init();
    }

    public void init(){
        System.out.println("i am framework......");
    }
}

//車(chē)
public class Car {
    FrameWork frameWork;

    public Car(int size){
        frameWork = new FrameWork(size);
        frameWork.init();
    }
}

可以看到,我們需要層層向上,不斷地修改代碼來(lái)傳遞參數(shù),從而達(dá)到“定制化的過(guò)程”

那么如果我們使用IoC的思想來(lái)實(shí)現(xiàn)這個(gè)“車(chē)”,代碼應(yīng)該就是這樣的

    public class FrameWork {
        public FrameWork(Bottom bottom){
            bottom.init();
        }
        public void init(){
            System.out.println("i am framework......");
        }
    }

    public class Bottom {
        public Bottom(Tire tire){
            tire.init();
        }

        public void init(){
            System.out.println("i am bottom......");
        }
    }

    public class FrameWork {
        public FrameWork(Bottom bottom){
            bottom.init();
        }
        public void init(){
            System.out.println("i am framework......");
        }
    }    


    public class Car {
        public Car(FrameWork frameWork){
            frameWork.init();
        }
    }

    public static void main(String[] args) {
        Tire tire = new Tire(17);
        Bottom bottom = new Bottom(tire);
        FrameWork frameWork = new FrameWork(bottom);
        Car car = new Car(frameWork);
    }

我們使用IoC的思想來(lái)寫(xiě)代碼可以發(fā)現(xiàn),當(dāng)我們對(duì)Tire這個(gè)類(lèi)進(jìn)行修改的時(shí)候,只需要在創(chuàng)建Tire的時(shí)候傳入?yún)?shù)就可以完成修改了,并不需要再像以前一樣層層遞歸的修改代碼。

通過(guò)IoC的思想我們讓代碼的耦合程度降低,讓代碼更加的靈活,讓程序更加的簡(jiǎn)單了


說(shuō)完了IoC,那么就來(lái)談?wù)勈裁词荢pring IoC

Spring IoC就是實(shí)現(xiàn)了具體IoC思想的框架,在這個(gè)Spring框架中存在一個(gè)IoC容器,通過(guò)這個(gè)容器我們可以存對(duì)象,也可以取對(duì)象。等同于說(shuō)我們將對(duì)象的創(chuàng)建與銷(xiāo)毀都交給了IoC容器來(lái)進(jìn)行管理,同時(shí)在這個(gè)容器中既可以存對(duì)象也可以取對(duì)象!


那么什么是DI呢?DI全稱“Dependency Injection”,翻譯成中文是依賴注入

DI實(shí)際上就是對(duì)IoC思想的具體實(shí)現(xiàn)方式,我們通過(guò)依賴注入的方法,從Spring容器中取出對(duì)象,注入到對(duì)象中去!由于Spring IoC容器的存在,我們?cè)诖鎯?chǔ)對(duì)象的時(shí)候就將依賴關(guān)系交給Spring IoC容器來(lái)進(jìn)行托管了,當(dāng)我們創(chuàng)建對(duì)象并使用注入的方式,就可以自動(dòng)的將該對(duì)象所依賴的對(duì)象注入到該對(duì)象中。這就是DI,實(shí)現(xiàn)了具體的IoC思想的行為!

舉個(gè)例子

在傳統(tǒng)的編程方式中,當(dāng)類(lèi)A依賴于類(lèi)B時(shí),我們通常會(huì)在創(chuàng)建A的實(shí)例時(shí),手動(dòng)創(chuàng)建B的實(shí)例并將其傳遞給A的構(gòu)造函數(shù)或者通過(guò)其他方式設(shè)置依賴關(guān)系。這樣的做法在小規(guī)模項(xiàng)目中可能沒(méi)有問(wèn)題,但隨著項(xiàng)目規(guī)模的增大,依賴關(guān)系的管理將變得復(fù)雜而且容易出錯(cuò)。

而在DI(依賴注入)中,Spring IoC容器會(huì)負(fù)責(zé)管理所有的bean對(duì)象的創(chuàng)建和依賴關(guān)系。當(dāng)創(chuàng)建A的實(shí)例時(shí),Spring IoC容器會(huì)自動(dòng)檢查A所依賴的B是否已經(jīng)在容器中創(chuàng)建,并將B的實(shí)例自動(dòng)注入到A中,無(wú)需手動(dòng)介入。

這種方式的好處在于:

  1. 解耦:類(lèi)A不需要關(guān)心B是如何創(chuàng)建的,也不需要負(fù)責(zé)B的生命周期管理。
  2. 靈活性:如果需要更換B的實(shí)現(xiàn),只需在配置文件中修改B的配置即可,而不需要修改A的代碼。
  3. 可測(cè)試性:在測(cè)試時(shí),可以輕松地將虛擬的B實(shí)例注入到A中,以便進(jìn)行單元測(cè)試。

總之,DI通過(guò)將對(duì)象之間的依賴關(guān)系交由IoC容器來(lái)管理,使得代碼更加清晰、易于維護(hù),同時(shí)也提高了項(xiàng)目的靈活性和可測(cè)試性。

我們?cè)僖詮N師做菜為例子

DI的過(guò)程如下:

  1. 廚子需要準(zhǔn)備一道菜,而這道菜需要食材。
  2. 廚子并不直接去尋找或創(chuàng)建食材,而是通過(guò)向食材供應(yīng)商(想象成IoC容器)請(qǐng)求所需的食材。
  3. 食材供應(yīng)商根據(jù)廚子的請(qǐng)求,提供相應(yīng)的食材,即便如此,食材的獲取和管理都是由食材供應(yīng)商來(lái)完成。
  4. 廚子接收到食材后,根據(jù)食譜,進(jìn)行烹飪并最終完成了一道美味的菜品。

這個(gè)例子中,廚子(我們)就是應(yīng)用程序的主體,而食材供應(yīng)商(DI容器,如Spring IoC容器)則負(fù)責(zé)管理和提供依賴(食材)。廚子無(wú)需關(guān)心如何獲取食材(依賴),只需要向供應(yīng)商(容器)說(shuō)明需要什么依賴,供應(yīng)商會(huì)將所需的依賴注入到廚子中。

這就是為什么DI是實(shí)現(xiàn)了具體IoC思想的行為,因?yàn)槲覀兊闹黧w不再控制依賴了,而是通過(guò)注入的方式來(lái)實(shí)現(xiàn)依賴!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-634735.html

到了這里,關(guān)于什么是IoC?什么是Spring IoC?什么是DI?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Spring框架IOC容器和DI依賴注入

    IOC(Invertion Of Control):控制反轉(zhuǎn),使用對(duì)象時(shí),由使用new創(chuàng)建對(duì)象轉(zhuǎn)變?yōu)橛赏獠刻峁?duì)象,此過(guò)程中對(duì)象的創(chuàng)建控制權(quán)由程序轉(zhuǎn)移到外部的思想稱之為控制反轉(zhuǎn). DI(Dependency Injection):依賴注入,在容器中建立bean與bean之間的關(guān)系的過(guò)程,稱之為依賴注入 pom.xml依賴引入 BookDao BookDaoImpl Book

    2023年04月09日
    瀏覽(25)
  • 【Spring框架三】——Spirng IOC和DI的實(shí)現(xiàn)

    【Spring框架三】——Spirng IOC和DI的實(shí)現(xiàn)

    【Spring框架一】——Spring框架簡(jiǎn)介 本篇博客主要總結(jié)的是以Spring 5為例,通過(guò)XML方式和注解的方式分別實(shí)現(xiàn)IOC和DI。并使用Spring5 進(jìn)行基礎(chǔ)運(yùn)用。 創(chuàng)建Maven項(xiàng)目:使用IDE創(chuàng)建一個(gè)maven項(xiàng)目 添加Spring依賴:在Maven配置文件pom.xml中添加Spring框架的依賴項(xiàng) 這樣Spring的基礎(chǔ)環(huán)境已經(jīng)搭

    2024年02月05日
    瀏覽(51)
  • Spring 是什么?IoC 和 DI的區(qū)別

    Spring 是什么?IoC 和 DI的區(qū)別

    我們通常講的Spring指的是Spring Framework(Spring框架),它是一個(gè)開(kāi)源的框架,有著活躍而龐大的社區(qū),這也是它之所謂經(jīng)久不衰的原因。官方的解讀是:Spring官網(wǎng) 翻譯過(guò)來(lái)就是:Spring使Java編程對(duì)每個(gè)人來(lái)說(shuō)更快、更容易、更安全。Spring對(duì)速度、簡(jiǎn)單性和生產(chǎn)力的關(guān)注使它成為全球最受歡

    2024年02月08日
    瀏覽(25)
  • 【Spring篇】IOC/DI注解開(kāi)發(fā)

    【Spring篇】IOC/DI注解開(kāi)發(fā)

    ??系列專(zhuān)欄:Spring系列專(zhuān)欄 ??個(gè)人主頁(yè):個(gè)人主頁(yè) 目錄 一、IOC/DI注解開(kāi)發(fā) 1.注解開(kāi)發(fā)定義bean? 2.純注解開(kāi)發(fā)模式 1.思路分析 2.實(shí)現(xiàn)步驟 3.注解開(kāi)發(fā)bean作用范圍與生命周期管理 1.環(huán)境準(zhǔn)備 2.Bean的作用范圍 3.Bean的生命周期 4.注解開(kāi)發(fā)依賴注入 1.環(huán)境準(zhǔn)備 2.注解實(shí)現(xiàn)按照類(lèi)型注入

    2024年02月03日
    瀏覽(32)
  • 【Spring】Spring有什么用?Spring核心與設(shè)計(jì)思想之IOC與DI

    【Spring】Spring有什么用?Spring核心與設(shè)計(jì)思想之IOC與DI

    ?Spring是一個(gè)開(kāi)源的、輕量級(jí)的、面向企業(yè)級(jí)的Java應(yīng)用框架。它提供了一種基于依賴注入和面向切面編程的方式,幫助開(kāi)發(fā)者構(gòu)建高效、可擴(kuò)展的應(yīng)用程序。 ?具體來(lái)說(shuō), Spring可以看作一個(gè)包含眾多工具方法的IOC容器。 Spring的出現(xiàn)是為了讓開(kāi)發(fā)更簡(jiǎn)單~ 那么問(wèn)題就很明確了

    2024年02月10日
    瀏覽(24)
  • Java語(yǔ)言開(kāi)發(fā)在線小說(shuō)推薦網(wǎng) 小說(shuō)推薦系統(tǒng) 基于用戶、物品的協(xié)同過(guò)濾推薦算法 SSM(Spring+SpringMVC+Mybatis)開(kāi)發(fā)框架 大數(shù)據(jù)、人工智能、機(jī)器學(xué)習(xí)開(kāi)發(fā)

    Java語(yǔ)言開(kāi)發(fā)在線小說(shuō)推薦網(wǎng) 小說(shuō)推薦系統(tǒng) 基于用戶、物品的協(xié)同過(guò)濾推薦算法 SSM(Spring+SpringMVC+Mybatis)開(kāi)發(fā)框架 大數(shù)據(jù)、人工智能、機(jī)器學(xué)習(xí)開(kāi)發(fā)

    1、開(kāi)發(fā)工具和使用技術(shù) MyEclipse10/Eclipse/IDEA,jdk1.8,mysql5.5/mysql8,navicat數(shù)據(jù)庫(kù)管理工具,tomcat,SSM(spring+springmvc+mybatis)開(kāi)發(fā)框架,jsp頁(yè)面,javascript腳本,jquery腳本,bootstrap前端框架(用戶端),layui前端框架(管理員端),layer彈窗組件等。 2、實(shí)現(xiàn)功能 前臺(tái)用戶包含:注

    2023年04月26日
    瀏覽(99)
  • Java Spring IoC&DI :探索Java Spring中控制反轉(zhuǎn)和依賴注入的威力,增強(qiáng)靈活性和可維護(hù)性

    Java Spring IoC&DI :探索Java Spring中控制反轉(zhuǎn)和依賴注入的威力,增強(qiáng)靈活性和可維護(hù)性

    ?? 博客主頁(yè):從零開(kāi)始的-CodeNinja之路 ? 收錄文章:Java Spring IoCDI :探索Java Spring中控制反轉(zhuǎn)和依賴注入的威力,增強(qiáng)靈活性和可維護(hù)性 ??歡迎大家點(diǎn)贊??評(píng)論??收藏?文章 我們一下要學(xué)習(xí)的內(nèi)容都是為了實(shí)現(xiàn)?內(nèi)聚低耦合來(lái)進(jìn)行的 軟件設(shè)計(jì)原則:?內(nèi)聚低耦合. ?內(nèi)聚指

    2024年04月15日
    瀏覽(23)
  • Spring IoC容器、IoC與DI

    Spring IoC容器、IoC與DI

    目錄 Spring是什么? 理解容器? 什么是IoC(Inversion of Control) 傳統(tǒng)的new創(chuàng)建對(duì)象的方式中類(lèi)與類(lèi)的耦合程度很大。? IoC的優(yōu)勢(shì):? Spring IoC容器最核心的功能? 什么是DI (Dependency Injection) IoC和DI的區(qū)別? Spring是指Spring Framework(Spring框架),它是開(kāi)源的框架,有著很龐大的社區(qū),通過(guò)

    2023年04月21日
    瀏覽(25)
  • Spring IoC&DI

    Spring IoC&DI

    前面我們大概知道了什么是 Spring,以及 Spring 家族中 Spring Boot 和 Spring MVC的開(kāi)發(fā),但是 Spring 到底是什么呢? 前面我為大家簡(jiǎn)單介紹了什么是 Spring 【Spring】什么是Spring,不過(guò)前面的介紹較為簡(jiǎn)單,要想知道Spring 的原理,這些知識(shí)不不足以幫助我們了解 Spring 的,所以這篇文

    2024年02月04日
    瀏覽(24)
  • 【學(xué)習(xí)】Spring IoC&DI

    【學(xué)習(xí)】Spring IoC&DI

    ???個(gè)人主頁(yè):Dikz12 ??格言:吾愚多不敏,而愿加學(xué) 歡迎大家??點(diǎn)贊?評(píng)論?收藏 目錄 Spring 是什么? 什么是 IoC容器? 傳統(tǒng)開(kāi)發(fā)模式? loC開(kāi)發(fā)模式 IoC的優(yōu)勢(shì)? IoC 的使用 Bean的存儲(chǔ)? ?方法注解 ?DI ?屬性注入 ?構(gòu)造?法注? ?Setter 注? @Autowired存在的問(wèn)題 ?解決方案:

    2024年04月15日
    瀏覽(24)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包