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

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

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

一、依賴注入方式

思考:向一個類中傳遞數據的方式有幾種?

  • 普通方法(set方法)
  • 構造方法

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

  • 引用類型
  • 簡單類型(基本數據類型與String)

依賴注入方式:

setter注入

  • 簡單類型
  • 引用類型

構造器注入

  • 簡單類型
  • 引用類型

二、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標簽ref屬性注入引用類型對象

<!--注入引用類型-->
    <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
        <!--property標簽:設置注入屬性-->
        <!--name屬性:設置注入的屬性名,實際是set方法對應的名稱-->
        <!--ref屬性:設置注入引用類型bean的id或name-->
        <property name="bookDao" ref="bookDao"/>
        <property name="userDao" ref="userDao"/>
    </bean>

簡單類型

BookDaoImpl實現類:

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

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

applicationContext.xml配置:

配置中使用property屬性value注入簡單類型對象

<!--注入簡單類型-->
    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
        <!--property標簽:設置注入屬性-->
        <!--name屬性:設置注入的屬性名,實際是set方法對應的名稱-->
        <!--value屬性:設置注入簡單類型數據值-->
        <property name="connectionNum" value="100"/>
        <property name="databaseName" value="mysql"/>
    </bean>

三、構造器注入

引用類型

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

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標簽ref屬性注入引用類型對象

<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>

簡單類型

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

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標簽ref屬性注入引用類型對象

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

參數適配(了解)

配置中使用constructor-arg標簽type屬性注入引用類型對象

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

配置中使用constructor-arg標簽index屬性注入引用類型對象

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

四、依賴注入方式選擇

1、強制依賴使用構造器進入,使用setter注入有概率不進入注入導致null對象出現

2、可選依賴使用setter注入進行,靈活性強

3、Spring框架倡導使用構造器,第三方框架內部大多數采用構造器注入的形式進行數據初始化,相對嚴謹

4、如果有必要可以兩者同時使用,使用構造器注入完成強制依賴的注入,使用setter注入完成可依賴的注入

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

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

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

相關文章

  • spring mvc 組合mybatis框架實例詳解

    spring mvc 組合mybatis框架實例詳解

    本項目采用 maven 結構,主要演示了 spring mvc + mybatis,controller 獲取數據后以json 格式返回數據。對spring mvc 組合mybatis的方法感興趣的朋友可以參考下本文
    2018-01-01
  • Java?Process中waitFor()的問題詳解

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

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

    Java用freemarker導出word實用示例

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

    Java實現Dbhelper支持大數據增刪改

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

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

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

    解決使用IDEA時跳轉到.class的問題

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

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

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

    Java中DateTimeFormatter的使用方法和案例

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

    關于Eureka的概念作用以及用法詳解

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

    javaWeb實現簡單文件上傳

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

最新評論

蚌埠市| 兴隆县| 云安县| 信宜市| 凯里市| 大港区| 黔东| 鹤壁市| 富平县| 剑川县| 特克斯县| 突泉县| 茶陵县| 舟曲县| 洪湖市| 博乐市| 卢湾区| 彭泽县| 五峰| 海伦市| 宜兰县| 溆浦县| 岳阳市| 盐池县| 怀宁县| 商都县| 巧家县| 城口县| 宝兴县| 馆陶县| 平遥县| 新源县| 犍为县| 潢川县| 张北县| 二连浩特市| 皮山县| 马关县| 汤阴县| 东方市| 栾川县|