天天看點

關于Spring依賴注入的深入了解前言

關于Spring依賴注入的深入了解

  • 前言
    • 開發環境
    • 建立項目
    • 安裝spring相關依賴包
    • 建立applicationContext.xml
    • 在Dao層建立UserDao接口,并寫一個showUser()方法
    • 在daoImpl層中建立UserDaoImpl實作類,并實作接口中的showUser方法
    • 在Biz層建立BizDao接口,并寫一個showUserBiz()方法
    • 在bizImpl層中建立UserBizImpl實作類,并實作接口中的showUserBiz方法
    • 在applicationContext.xml中建立Bean執行個體進行依賴注入
    • 建立一個測試類
    • 運作結果
    • 總結

前言

本文是作者@Mecle_對spring依賴注入的個人了解,希望在spring開發中能對大家有所幫助。

開發環境

MAC OS

IntelliJ IDEA

Maven

建立項目

建立如圖項目結構(可忽略類,下文會詳細講解)

關于Spring依賴注入的深入了解前言

安裝spring相關依賴包

<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.1.5.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>5.1.4.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>5.1.5.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.1.5.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.2</version>
    </dependency>
           

建立applicationContext.xml

右擊resource,按光标位置依次點選

關于Spring依賴注入的深入了解前言

輸入源檔案名

關于Spring依賴注入的深入了解前言

建立成功後如圖

關于Spring依賴注入的深入了解前言

在Dao層建立UserDao接口,并寫一個showUser()方法

package dao;

public interface UserDao {
    public void showUser();
}

           

在daoImpl層中建立UserDaoImpl實作類,并實作接口中的showUser方法

package dao.daoImpl;
import dao.UserDao;

public class UserDaoImpl implements UserDao {
    public void showUser() {
        System.out.println("大家好,我是Mecle建立的UserDaoImpl!");
    }
}


           

在Biz層建立BizDao接口,并寫一個showUserBiz()方法

package biz;

public interface UserBiz {
    public void showUserBiz();
}
           

在bizImpl層中建立UserBizImpl實作類,并實作接口中的showUserBiz方法

package biz.bizImpl;

import biz.UserBiz;
import dao.UserDao;

public class UserBizImpl implements UserBiz {
    //聲明相關變量
    private UserDao userDao;
    private UserBiz userBiz;
    //setter方法相當于依賴注入的門閥,隻有設定了門閥才會被開啟,Bean執行個體才會被建立,依賴注入才會順利完成
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    public void setUserBiz(UserBiz userBiz) {
        this.userBiz = userBiz;
    }

    public void showUserBiz() {
        this.userDao.showUser();
        System.out.println("大家好,我是Mecle建立的UserBizImpl!");
    }
}

           

在applicationContext.xml中建立Bean執行個體進行依賴注入

有幾個實作類就建立幾個Bean執行個體,id為bean執行個體的唯一辨別,class為對應實作類的包路徑,property是bean的子元素,它用于調用bean執行個體中的showUser()方法完成屬性指派,進而實作依賴注入。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
        <bean id="userDao" class="dao.daoImpl.UserDaoImpl"></bean>
        <bean id="userBiz" class="biz.bizImpl.UserBizImpl">
        		将id為userDao的Bean執行個體注入到userDao執行個體中!
                <property name="userDao" ref="userDao"></property>
        </bean>
</beans>
           

建立一個測試類

package test;

import biz.UserBiz;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class test {
    public static void main(String args[]) {
        //讀取applicationContext.xml檔案
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //擷取userBiz的Bean執行個體
        UserBiz userBiz = (UserBiz) applicationContext.getBean("userBiz");
        //調用UserBizImpl中的showUserBiz方法
        userBiz.showUserBiz();
    }
}

           

運作結果

關于Spring依賴注入的深入了解前言

總結

1、有多少個實作類就建立多少個Bean執行個體,因為建立bean執行個體的本質就是執行個體化一個對象(可以這麼了解)。

2、如果要在一個實作類中調用另外一個實作類中的方法,這是就需要進行依賴注入,如本文中的UserBizImpl類調用了UserDaoImpl中的showUser()方法,就需要UserBizImpl中聲明userDao變量并建立它的setter方法,用于依賴注入的實作。同時在applicationContext.xml中的調用方(即id為userBiz的Bean執行個體)中建立一個property子元素,name為被調用方(即UserDaoImpl中的成員變量userDao),ref為需要被注入的Bean執行個體的id。這樣就實作了一個完整的依賴注入過程。

繼續閱讀