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

Spring依賴注入(DI)兩種方式的示例詳解

 更新時(shí)間:2022年06月08日 15:01:39   作者:夏志121  
這篇文章主要介紹了Spring依賴注入(DI)的兩種方式:setter注入和構(gòu)造器注入。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下

一、依賴注入方式

思考:向一個(gè)類中傳遞數(shù)據(jù)的方式有幾種?

  • 普通方法(set方法)
  • 構(gòu)造方法

思考:依賴注入描述了在容器中建立bean與bean之間依賴關(guān)系的過程,如果bean運(yùn)行需要的是數(shù)字或字符串呢?

  • 引用類型
  • 簡(jiǎn)單類型(基本數(shù)據(jù)類型與String)

依賴注入方式:

setter注入

  • 簡(jiǎn)單類型
  • 引用類型

構(gòu)造器注入

  • 簡(jiǎn)單類型
  • 引用類型

二、setter注入

引用類型

在bean中定義引用類型屬性并提供可訪問的set方法

import com.itheima.dao.BookDao;
import com.itheima.service.BookService;
 
public class BookServiceImpl implements BookService {
    private BookDao bookDao;
 
    public void save() {
        System.out.println("book service save ...");
        bookDao.save();
    }
    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }
}

配置中使用property標(biāo)簽ref屬性注入引用類型對(duì)象

<!--注入引用類型-->
    <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
        <!--property標(biāo)簽:設(shè)置注入屬性-->
        <!--name屬性:設(shè)置注入的屬性名,實(shí)際是set方法對(duì)應(yīng)的名稱-->
        <!--ref屬性:設(shè)置注入引用類型bean的id或name-->
        <property name="bookDao" ref="bookDao"/>
        <property name="userDao" ref="userDao"/>
    </bean>

簡(jiǎn)單類型

BookDaoImpl實(shí)現(xiàn)類:

在bean中定義引用類型屬性并提供可訪問的set方法

import com.itheima.dao.BookDao;
 
public class BookDaoImpl implements BookDao {
 
    private String databaseName;
    private int connectionNum;
 
    //setter注入需要提供要注入對(duì)象的set方法
    public void setConnectionNum(int connectionNum) {
        this.connectionNum = connectionNum;
    }
 
    //setter注入需要提供要注入對(duì)象的set方法
    public void setDatabaseName(String databaseName) {
        this.databaseName = databaseName;
    }
 
    public void save() {
        System.out.println("book dao save ..." + databaseName + "," + connectionNum);
    }
}

applicationContext.xml配置:

配置中使用property屬性value注入簡(jiǎn)單類型對(duì)象

<!--注入簡(jiǎn)單類型-->
    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
        <!--property標(biāo)簽:設(shè)置注入屬性-->
        <!--name屬性:設(shè)置注入的屬性名,實(shí)際是set方法對(duì)應(yīng)的名稱-->
        <!--value屬性:設(shè)置注入簡(jiǎn)單類型數(shù)據(jù)值-->
        <property name="connectionNum" value="100"/>
        <property name="databaseName" value="mysql"/>
    </bean>

三、構(gòu)造器注入

引用類型

在bean中定義引用類型屬性并提供可訪問的構(gòu)造方法

public class BookServiceImpl implements BookService{
    private BookDao bookDao;
    private UserDao userDao;
 
    public BookServiceImpl(BookDao bookDao, UserDao userDao) {
        this.bookDao = bookDao;
        this.userDao = userDao;
    }
}

配置中使用constructor-arg標(biāo)簽ref屬性注入引用類型對(duì)象

<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
 
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
        <constructor-arg name="userDao" ref="userDao"/>
        <constructor-arg name="bookDao" ref="bookDao"/>
    </bean>

簡(jiǎn)單類型

在bean中定義引用類型屬性并提供可訪問的構(gòu)造方法

public class BookDaoImpl implements BookDao {
    private String databaseName;
    private int connectionNum;
 
    public BookDaoImpl(String databaseName, int connectionNum) {
        this.databaseName = databaseName;
        this.connectionNum = connectionNum;
    }
}

配置中使用constructor-arg標(biāo)簽ref屬性注入引用類型對(duì)象

<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
        <!--根據(jù)構(gòu)造方法參數(shù)名稱注入-->
        <constructor-arg name="connectionNum" value="10"/>
        <constructor-arg name="databaseName" value="mysql"/>
 </bean>

參數(shù)適配(了解)

配置中使用constructor-arg標(biāo)簽type屬性注入引用類型對(duì)象

<!--解決形參名稱的問題,與形參名不耦合-->
    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
        <!--根據(jù)構(gòu)造方法參數(shù)類型注入-->
        <constructor-arg type="int" value="10"/>
        <constructor-arg type="java.lang.String" value="mysql"/>
    </bean>

配置中使用constructor-arg標(biāo)簽index屬性注入引用類型對(duì)象

 <!--解決參數(shù)類型重復(fù)問題,使用位置解決參數(shù)匹配-->
    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
        <!--根據(jù)構(gòu)造方法參數(shù)位置注入-->
        <constructor-arg index="0" value="mysql"/>
        <constructor-arg index="1" value="100"/>
    </bean>

四、依賴注入方式選擇

1、強(qiáng)制依賴使用構(gòu)造器進(jìn)入,使用setter注入有概率不進(jìn)入注入導(dǎo)致null對(duì)象出現(xiàn)

2、可選依賴使用setter注入進(jìn)行,靈活性強(qiáng)

3、Spring框架倡導(dǎo)使用構(gòu)造器,第三方框架內(nèi)部大多數(shù)采用構(gòu)造器注入的形式進(jìn)行數(shù)據(jù)初始化,相對(duì)嚴(yán)謹(jǐn)

4、如果有必要可以兩者同時(shí)使用,使用構(gòu)造器注入完成強(qiáng)制依賴的注入,使用setter注入完成可依賴的注入

5、實(shí)際開發(fā)過程中還要根據(jù)實(shí)際情況分析,如果受控對(duì)象沒有提供setter方法就必須使用構(gòu)造器注入

6、自己開發(fā)的模塊推薦使用setter注入

到此這篇關(guān)于Spring依賴注入(DI)兩種方式的示例詳解的文章就介紹到這了,更多相關(guān)Spring依賴注入內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring mvc 組合mybatis框架實(shí)例詳解

    spring mvc 組合mybatis框架實(shí)例詳解

    本項(xiàng)目采用 maven 結(jié)構(gòu),主要演示了 spring mvc + mybatis,controller 獲取數(shù)據(jù)后以json 格式返回?cái)?shù)據(jù)。對(duì)spring mvc 組合mybatis的方法感興趣的朋友可以參考下本文
    2018-01-01
  • Java?Process中waitFor()的問題詳解

    Java?Process中waitFor()的問題詳解

    這篇文章主要給大家介紹了關(guān)于Java?Process中waitFor()問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-12-12
  • Java用freemarker導(dǎo)出word實(shí)用示例

    Java用freemarker導(dǎo)出word實(shí)用示例

    本篇文章主要介紹了Java用freemarker導(dǎo)出word實(shí)用示例,使用freemarker的模板來實(shí)現(xiàn)功能,有需要的可以了解一下。
    2016-11-11
  • Java實(shí)現(xiàn)Dbhelper支持大數(shù)據(jù)增刪改

    Java實(shí)現(xiàn)Dbhelper支持大數(shù)據(jù)增刪改

    這篇文章主要介紹了Java實(shí)現(xiàn)Dbhelper支持大數(shù)據(jù)增刪改功能的實(shí)現(xiàn)過程,感興趣的小伙伴們可以參考一下
    2016-01-01
  • jvm垃圾回收之GC調(diào)優(yōu)工具分析詳解

    jvm垃圾回收之GC調(diào)優(yōu)工具分析詳解

    這篇文章主要為大家介紹了jvm垃圾回收之GC調(diào)優(yōu)工具的分析詳解,在進(jìn)行JVM?GC性能調(diào)優(yōu)之前,需要使用某些工具獲取到當(dāng)前應(yīng)用的狀態(tài)信息
    2022-01-01
  • 解決使用IDEA時(shí)跳轉(zhuǎn)到.class的問題

    解決使用IDEA時(shí)跳轉(zhuǎn)到.class的問題

    這篇文章主要介紹了解決使用IDEA時(shí)跳轉(zhuǎn)到.class的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 解決@ServerEndpoint不能注入@Autowired的問題

    解決@ServerEndpoint不能注入@Autowired的問題

    這篇文章主要介紹了解決@ServerEndpoint不能注入@Autowired的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java中DateTimeFormatter的使用方法和案例

    Java中DateTimeFormatter的使用方法和案例

    在Java中,DateTimeFormatter類用于格式化和解析日期時(shí)間對(duì)象,它是日期時(shí)間格式化的強(qiáng)大而靈活的工具,本文將和大家一起探討Java中DateTimeFormatter的使用方法和案例,需要的朋友可以參考下
    2023-10-10
  • 關(guān)于Eureka的概念作用以及用法詳解

    關(guān)于Eureka的概念作用以及用法詳解

    這篇文章主要介紹了關(guān)于Eureka的概念作用以及用法詳解,服務(wù)治理就是提供了微服務(wù)架構(gòu)中各微服務(wù)實(shí)例的快速上線或下線且保持各服務(wù)能正常通信的能力的方案總稱,需要的朋友可以參考下
    2023-05-05
  • javaWeb實(shí)現(xiàn)簡(jiǎn)單文件上傳

    javaWeb實(shí)現(xiàn)簡(jiǎn)單文件上傳

    這篇文章主要為大家詳細(xì)介紹了JAVAWeb實(shí)現(xiàn)簡(jiǎn)單文件上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06

最新評(píng)論

鄂伦春自治旗| 通海县| 阿拉尔市| 灵丘县| 富源县| 南和县| 溧阳市| 盐津县| 邹城市| 循化| 金阳县| 墨竹工卡县| 全州县| 绵阳市| 浦县| 健康| 满城县| 海安县| 莱西市| 南康市| 天峨县| 林口县| 荔浦县| 包头市| 嘉义县| 沅陵县| 道孚县| 什邡市| 遵义县| 怀安县| 成武县| 柏乡县| 遂川县| 澄城县| 平舆县| 芒康县| 盐津县| 鹤峰县| 屏东市| 探索| 凤台县|