您的“關註”和“點贊”,是信任,是認可,是支持,是動力...... 如意見相佐,可留言。 本人必將竭盡全力試圖做到準確和全面,終其一生進行修改補充更新。 [toc] 具體案例:演示 IoC 容器的使用 通過具體實例演示 IoC 容器的使用,步驟如下所示。 本文使用的開發工具為: 第一步:創建工程項目 ...
您的“關註”和“點贊”,是信任,是認可,是支持,是動力......
如意見相佐,可留言。
本人必將竭盡全力試圖做到準確和全面,終其一生進行修改補充更新。
目錄
具體案例:演示 IoC 容器的使用
通過具體實例演示 IoC 容器的使用,步驟如下所示。
本文使用的開發工具為:
Eclipse IDE for Enterprise Java Developers.
Version: 2018-12 (4.10.0)
Build id: 20181214-0600
第一步:創建工程項目
工程項目是基礎。在 Eclipse 中創建 Web 項目spring-demo
。
將 Spring 框架所需的 JAR 包複製到項目的 lib 目錄中,並將其添加到類路徑下(選中每個 jar 包 → 右鍵 → Build Path → Add to Build Path),添加後的項目如下圖所示:
第二步:創建實現類
創建交給 Spring 來實例化的實現類。通常先創建 Dao 介面,再創建 Dao 介面的實現類。
(1)先創建 Dao 介面
在項目的 src
目錄下創建一個名為 com.manongajie.dao
的包,在該包中創建一個名為 UserDao
的介面,併在介面中添加一個 add() 抽象方法,如下所示:
package com.manongajie.dao;
/**
* Dao 介面(演示用)
*
* @author manongajie
*
*/
public interface UserDao {
public void add();
}
(2)創建 Dao 介面的實現類 UserDaoImpl
在 com.manongajie.ioc
包下創建 UserDao
的實現類 UserDaoImpl
,代碼如下所示:
package com.manongajie.ioc;
import com.manongajie.dao.UserDao;
public class UserDaoImpl implements UserDao {
@Override
public void add() {
// TODO Auto-generated method stub
System.out.println("添加了一個 user 。");
}
}
第三步:創建 Spring 配置文件
1 配置 Spring 約束
1.1 Spring 約束概述
Spring 本身是基於 xml 配置來工作的,在使用 Spring 的過程中不可避免的要編寫大量 xml 配置,Spring 官方提供了這些 xml 文件的編寫規範,這是通過提供 xml 的約束文件來實現的。
簡單理解, xml 的約束其實是一種限定 xml 文件寫法的技術,主要分為兩種:
- DTD,通常文件的尾碼
.dtd
。 - Schema,通常文件的尾碼為
.xsd
。
Spring 提供了 Schema 格式的約束,來限定 Spring 配置文件的寫法。
1.2 將 Spring 的約束文件交給 Eclipse 管理
開發者可以通過閱讀 Spring 提供的約束文件來瞭解 Sprinig 的 xml 配置的寫法。
但是,這麼整的話會很麻煩,所以,通常我們會將約束文件交給開發工具管理(本文用的是 Eclipse),開發工具可以通過解析約束文件瞭解 xml 的寫法,併在需要時為開發者提供標簽提示。
如何將 Spring 的約束文件(這裡只整 Spring beans 的約束文件)交給 Eclipse 來管理呢?
請參見以下步驟,
(1)找到 Spring 的約束文件,路徑為:\spring-5.2.6.RELEASE-dist\spring-framework-5.2.6.RELEASE\schema\beans
。一步步打開存放 Spring 框架的目錄spring-framework-5.2.6.RELEASE
,如下圖所示:
打開此目錄,如下圖所示:
再打開schema
目錄,如下圖所示:
再打開beans
目錄,就找到 Spring beans 約束文件了。如下圖所示:
(2)打開 Eclipse 的 /Window/Preferences
,配置其中的XML Catalog
,如下圖所示:
找到上圖中的 ③ 按鈕“Add”
,點擊在新彈出的選項卡中導入上一步找到的spring-beans.xsd
文件,並設置好名稱空間,通常是在自動識別的名稱空間之後再加上/文件名
(/spring-beans.xsd
),點擊OK
即可。如下圖所示:
2 配置 xml 模版,用來快速生成 xml 文件
xml 文件模版代碼,可以去官網獲取,不同版本的 Spring 框架,配置文件頭約束的寫法是不同的,建議去官網獲取。如下所示(spring 5.2.6 版本):
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<!-- more bean definitions go here -->
</beans>
由於 Eclipse 不會自動生成如上所示的 xml 文件(至少本人所安裝的 Eclipse 沒有自動生成),需要手動敲寫代碼,可以看出來,一般人真記不住,得複製粘貼,比較麻煩。經常要用到的話,還是配置一個 xml 模版比較好,可以快速生成 所需的 xml 文件。
配置 xml 模版步驟如下所示:
(1)在 Eclipse 中的/Window/Preferences
中配置新模版,如下圖所示:
(2)點擊New
按鈕,進入到New Template
選項框中,進行設置模版,全部搞定之後,點擊OK
即可。如下圖所示:
3 創建 Spring 配置文件(使用 xml 模版)和編寫配置文件內容
3.1 創建 Spring 配置文件(使用 xml 模版)
在 src
目錄下創建 Spring 的核心配置文件 applicationContext.xml
(這個 xml 文件名是可以自定義的),如下圖所示:
選中我們提前創建好的模版,確定之後,如下圖所示:
3.2 編寫配置文件內容
applicationContext.xml
配置文件創建好之後,就可以寫配置了,如下代碼所示:
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 2 到 5 行是 Spring 的約束配置 -->
<!-- 由 Spring 容器創建該類的實例對象:bean spring 管理的類都稱為 bean
id 表示文件的唯一標識,不能重覆,“駝峰命名法”首字母小寫;
class 表示指定需要實例化的 Bean 的全限定類名(包名+類名)。 -->
<bean id="userDaoImpl" class="com.manongajie.ioc.UserDaoImpl"></bean>
<!-- 還可以設置別名標簽:通過 IoC 容器獲取 userDao 實例。applicationContext.getBean("user") -->
<alias name="userDaoImpl" alias="user"></alias>
</beans>
第四步:編寫測試類
在 com.manongajie.test
包下創建測試類 SpringTest1
,併在該類中添加一個名為 test1()
的方法,代碼如下所示:
package com.manongajie.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.manongajie.dao.UserDao;
public class SpringTest1 {
@Test
public void test1() {
// 定義Spring配置文件的路徑
String xmlPath = "applicationContext.xml";
// 初始化 Spring 容器,載入配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
// 通過 IoC 容器獲取 userDao 實例。applicationContext.getBean(id)
//UserDao userDaoImpl = (UserDao) applicationContext.getBean("userDaoImpl");
// 通過 IoC 容器獲取 userDao 實例。applicationContext.getBean(全限定類名.class)
UserDao userDaoImpl = (UserDao) applicationContext.getBean(com.manongajie.ioc.UserDaoImpl.class);
// 別名標簽:通過 IoC 容器獲取 userDao 實例。applicationContext.getBean("user")
// UserDao userDaoImpl = (UserDao) applicationContext.getBean("user");
// 調用 UserDao 的 add() 方法
userDaoImpl.add();
}
}
運行結果(使用 JUnit 測試運行 test1() 方法,運行成功後,控制台的輸出結果):
添加了一個 user 。
由以上代碼可以看出,在程式執行時,對象的創建並不是通過 new
一個類完成的,而是由 Spring 容器管理實現的。這就是 Spring IoC 容器思想的工作機制。