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

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)文章

最新評(píng)論