關于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相關依賴包
<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,按光标位置依次點選
輸入源檔案名
建立成功後如圖
在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();
}
}
運作結果
總結
1、有多少個實作類就建立多少個Bean執行個體,因為建立bean執行個體的本質就是執行個體化一個對象(可以這麼了解)。
2、如果要在一個實作類中調用另外一個實作類中的方法,這是就需要進行依賴注入,如本文中的UserBizImpl類調用了UserDaoImpl中的showUser()方法,就需要UserBizImpl中聲明userDao變量并建立它的setter方法,用于依賴注入的實作。同時在applicationContext.xml中的調用方(即id為userBiz的Bean執行個體)中建立一個property子元素,name為被調用方(即UserDaoImpl中的成員變量userDao),ref為需要被注入的Bean執行個體的id。這樣就實作了一個完整的依賴注入過程。