欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入淺出講解Spring框架中依賴注入與控制反轉(zhuǎn)及應(yīng)用

 更新時(shí)間:2022年03月31日 11:02:13   作者:小皮豬  
依賴注入(Dependency?Injection)和控制反轉(zhuǎn)(Inversion?of?Control)是同一個(gè)概念。具體含義是:當(dāng)某個(gè)角色(可能是一個(gè)Java實(shí)例,調(diào)用者)需要另一個(gè)角色(另一個(gè)Java實(shí)例,被調(diào)用者)的協(xié)助時(shí),在?傳統(tǒng)的程序設(shè)計(jì)過(guò)程中,通常由調(diào)用者來(lái)創(chuàng)建被調(diào)用者的實(shí)例

概念:

     依賴注入(Dependency Injection,DI)與控制反轉(zhuǎn)(IoC)的含義相同,只不過(guò)是從兩個(gè)角度描述的同一個(gè)概念。對(duì)于一個(gè)Spring初學(xué)者來(lái)說(shuō),這兩種稱呼都很難理解,我們通過(guò)簡(jiǎn)單的語(yǔ)言來(lái)描述這兩個(gè)概念。

使用對(duì)比

1. 使用前:

      當(dāng)某個(gè)Java對(duì)象(調(diào)用者)需要調(diào)用另一個(gè)Java對(duì)象(被調(diào)用者,就是被依賴對(duì)象)時(shí),在傳統(tǒng)模式下,調(diào)用者通常會(huì)采用"new被調(diào)用者"的代碼方式來(lái)創(chuàng)建對(duì)象。這種方式會(huì)導(dǎo)致調(diào)用者與被調(diào)用者之間的耦合性增加,不利于后期項(xiàng)目的升級(jí)和維護(hù)。

2. 使用后:

    在使用Spring框架后,對(duì)象的實(shí)例不再由調(diào)用者來(lái)創(chuàng)建,而是由Spring框架的容器來(lái)創(chuàng)建,它會(huì)負(fù)責(zé)控制程序之間的關(guān)系,而不是由調(diào)用者的程序代碼直接控制。這樣,控制權(quán)由應(yīng)用代碼轉(zhuǎn)移到Spring框架容器,控制權(quán)發(fā)生了反轉(zhuǎn),這就是Spring框架的控制反轉(zhuǎn)。

    從Spring框架容器的角度來(lái)看,它負(fù)責(zé)將被依賴對(duì)象賦值給調(diào)用者的成員變量,相當(dāng)于調(diào)用者注入了其依賴實(shí)例,這就是Spring框架的依賴注入。

理解控制反轉(zhuǎn)(Ioc):

     控制反轉(zhuǎn)也稱為依賴注入,是面向?qū)ο缶幊讨械囊环N設(shè)計(jì)理念,用來(lái)降低程序代碼間的耦合度,在MVC的設(shè)計(jì)模式中經(jīng)常使用。首先考慮什么是依賴。依賴在代碼中一般指通過(guò)局部變量、方法參數(shù)、返回值等建立的對(duì)于其他對(duì)象的調(diào)用關(guān)系。例如,在A類的方法中,實(shí)例化了B類的對(duì)象并調(diào)用其方法以完成特定的功能,即A類依賴于B類。

     幾乎所有應(yīng)用都由兩個(gè)或更多的類,通過(guò)彼此合作來(lái)實(shí)現(xiàn)完整功能的。類與類之間的依賴關(guān)系增加了程序開發(fā)的復(fù)雜程度,在開發(fā)一個(gè)類的時(shí)候,還要考慮對(duì)正在使用該類的其他類的影響。如常見的業(yè)務(wù)層調(diào)用數(shù)據(jù)訪問(wèn)層實(shí)現(xiàn)持久化操作,解決問(wèn)題的步驟如下:

(1)獲取Spring開發(fā)包并為工程添加Spring框架支持

(2)為業(yè)務(wù)層和數(shù)據(jù)訪問(wèn)層接口,聲明所需要的方法

(3)編寫數(shù)據(jù)訪問(wèn)層接口UserDao的實(shí)現(xiàn)類,完成具體的持久化操作

(4)在業(yè)務(wù)實(shí)現(xiàn)類中聲明UserDao接口類型的屬性,并添加適當(dāng)?shù)臉?gòu)造方法為屬性賦值

(5)在Spring的配置文件中,將DAO對(duì)象以構(gòu)造注入的方式賦值給業(yè)務(wù)實(shí)例的UserDao類型屬性

(6)在代碼中獲取Spring配置文件裝配好的業(yè)務(wù)類對(duì)象,實(shí)現(xiàn)程序功能

IoC的應(yīng)用方法 

IoC容器中配置屬性的語(yǔ)法

第一種方式:

Book.java

package cn.spring.ioc.demo.exercise;
 
public class Book {
    private Integer id;
    private String bookName;
    private Float price;
 
    public Integer getId() {
        return id;
    }
 
    public String getBookName() {
        return bookName;
    }
 
    public Float getPrice() {
        return price;
    }
 
    public void setId(Integer id) {
        this.id = id;
    }
 
    public void setBookName(String bookName) {
        this.bookName = bookName;
    }
 
    public void setPrice(Float price) {
        this.price = price;
    }
 
    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", bookName='" + bookName + '\'' +
                ", price=" + price +
                '}';
    }
}

容器配置:

    <bean id="book1" class="cn.spring.ioc.demo.exercise.Book">
        <property name="id" value="1001"/>
        <property name="bookName" value="C++基礎(chǔ)編程"/>
        <property name="price" value="28.2"/>
    </bean>

第二種方式:

Book_1.java

package cn.spring.ioc.demo.exercise;
 
public class Book_1 {
    private Integer id;
    private String bookName;
    private Float price;
 
    public Book_1(Integer id,String bookName,Float price){
        this.id = id;
        this.bookName = bookName;
        this.price = price;
    }
 
    public Integer getId() {
        return id;
    }
 
    public String getBookName() {
        return bookName;
    }
 
    public Float getPrice() {
        return price;
    }
 
    public void setId(Integer id) {
        this.id = id;
    }
 
    public void setBookName(String bookName) {
        this.bookName = bookName;
    }
 
    public void setPrice(Float price) {
        this.price = price;
    }
 
    @Override
    public String toString() {
        return "Book_1{" +
                "id=" + id +
                ", bookName='" + bookName + '\'' +
                ", price=" + price +
                '}';
    }
}

容器配置:

    <bean id="book2" class="cn.spring.ioc.demo.exercise.Book_1">
        <constructor-arg index="0" value="1002"/>
        <constructor-arg index="1" value="Java/>
        <constructor-arg index="2" value="33.3"/>
    </bean>

第三種方式:

BookFactory.java

package cn.spring.ioc.demo.exercise;
 
public class BookFactory {
    public Book getBookInstance(Book book){
        return book;
    }
}

容器配置:

    <bean id="book3" class="cn.spring.ioc.demo.exercise.Book">
        <property name="id" value="1004"/>
        <property name="bookName" value="go"/>
        <property name="price" value="88.2"/>
    </bean>
 
    <bean id="factory" class="cn.spring.ioc.demo.exercise.BookFactory" />
    <bean id="finstance" factory-bean="factory" factory-method="getBookInstance">
        <constructor-arg index="0" ref="book3"/>
    </bean>

第四種方式:

Book_1Factory.java

package cn.spring.ioc.demo.exercise;
 
public class Book_1Factory {
    public static Book_1 getBookInstance(Integer id,String bookName,Float price){
        return new Book_1(id, bookName, price);
    }
}

容器配置:

    <bean id="bf" class="cn.spring.ioc.demo.exercise.Book_1Factory" factory-method="getBookInstance">
        <constructor-arg index="0" value="1003"/>
        <constructor-arg index="1" value="python"/>
        <constructor-arg index="2" value="99.9"/>
    </bean>

到此這篇關(guān)于深入淺出講解Spring框架中依賴注入與控制反轉(zhuǎn)及應(yīng)用的文章就介紹到這了,更多相關(guān)Spring框架 依賴注入內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot集成es插入和查詢的簡(jiǎn)單使用示例詳解

    springboot集成es插入和查詢的簡(jiǎn)單使用示例詳解

    這篇文章主要介紹了springboot集成es 插入和查詢的簡(jiǎn)單使用,本文分步驟結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • 在Java中將List轉(zhuǎn)換為String輸出過(guò)程解析

    在Java中將List轉(zhuǎn)換為String輸出過(guò)程解析

    這篇文章主要介紹了在Java中將List轉(zhuǎn)換為String輸出過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java使用Jsoup解析html網(wǎng)頁(yè)的實(shí)現(xiàn)步驟

    Java使用Jsoup解析html網(wǎng)頁(yè)的實(shí)現(xiàn)步驟

    Jsoup是一個(gè)用于解析HTML文檔的Java庫(kù),本文主要介紹了Java使用Jsoup解析html網(wǎng)頁(yè)的實(shí)現(xiàn)步驟,可以提取文本、鏈接、圖片等,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • Java中的對(duì)象流總結(jié)(必看篇)

    Java中的對(duì)象流總結(jié)(必看篇)

    下面小編就為大家?guī)?lái)一篇Java中的對(duì)象流總結(jié)(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • 最新評(píng)論