亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

首頁 慕課教程 Spring 入門教程 Spring 入門教程 Spring IoC(控制反轉)之注解配置

Spring IoC(控制反轉)之注解配置

1. 前言

上兩節,我們學習了 Spring IoC 的 xml 配置實現,整理了 xml 方式的實現步驟,并且模擬了 Spring 的容器如何加載解析 xml 配置文件,那么我們發現一點現象:

對于 Spring 的 bean 管理而言,如果全部通過 xml 文件實現的話,配置文件的內容未免過于臃腫。因為對于一個類的實例化,就需要一個 bean 標簽。

這樣的話,一個大型工程下來,有那么幾百個,幾千個類,Spring 的 xml 文件維護起來,成本實在太高。

疑問導出

Spring 能否有更方便的方式實現 IoC 呢?Spring 提出了兩種 IoC 實現方式,一種是基于配置文件,一種是基于注解形式。

本節,我們學習下 Spring IoC 的注解形式是如何實現的。

2. 案例實現

2.1 步驟介紹

回顧 Spring IoC 的 xml 實現步驟

? 1. 使用 new 關鍵字對 ClassPathXmlApplicationContext 做初始化;

? 2. 在初始化容器對象的構造傳入 xml 配置文件的位置 ;

? 3. 在配置文件中通過 bean 標簽可以對類進行描述:類的路徑、類的標識、類的構造參數等等。

注解實現 IoC 的思路分析:

? 1.Spring 容器一樣需要初始化;

? 2. 一樣需要傳入 xml 配置文件 ----- 需要描述清楚 需要被實例化的類都有哪些;

? 3.xml 文件中 不需要使用 bean 標簽描述被實例化的類 ------ 使用注解實現 IoC 管理目的就是為了簡化 bean 標簽的配置。

疑問導出:

如果是 xml 文件方式實現 IoC ,加載 xml 文件的 bean 標簽就已經知道,需要被實例化的對象,那么如果不使用 bean 標簽描述,Spring 框架如何得知哪些類需要被容器管理呢?

核心思想:

開發人員無需使用 XML 來描述 bean ,而是將配置移入 Java 的類本身,通過 Spring 支持的組件掃描來實現。

看官稍等… 馬上開始我們的案例實現。

2.2 工程實現

創建工程

為了區分 xml 工程,坐標名稱換成 spring_an ,其實無所謂,大家自行創建即可。

圖片描述

導入依賴

依賴的坐標跟 xml 的工程坐標一致即可,無需導入多余的依賴。

<dependencies>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.0.2.RELEASE</version>
    </dependency>
</dependencies>

項目代碼

為了測試,在工程內部創建 UserDao 的接口和 UserDao 的實現類 UserDaoImpl。

UserDao 代碼如下:

public interface UserDao {

    public void saveUser();
}

UserDaoImpl 的實現類代碼如下:

@Repository
public class UserDaoImpl implements  UserDao {

    public void saveUser() {
        System.out.println("執行dao的保存方法");
    }
}

注意事項: 由于我們是基于注解的方式實現對 bean 的管理,所以在實現類上面需要添加一個注解 @Repository,此注解的作用是為了 Spring 的容器啟動后,
需要要自動檢測這些被注解的類并注冊相應的 bean 實例到容器中。

Spring 的核心配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="com.wyan.dao"></context:component-scan>

</beans>

上面是本案例的配置文件,那么可以看出跟 xml 的配置文件有很大的區別:

?配置節點context-component-scan 標簽,這是 Spring 框架自定義的 xml 標簽,通過 base-package 的屬性,指明需要被自動掃描實例化的類所在位置。

如上圖所示,我們在 com.wyan.dao 下的類是需要掃描自動注入容器的。

小細節:不是在 com.wyan.dao 下的所有類都會自動注入到容器,而是要搭配注解:比如我們的 @Repository 當然還有其余的注解,我們后面章節會詳細講解。

測試類測試結果

圖片描述

代碼解釋

測試類其實跟 xml 的方式一模一樣,我們本次測試的目的一樣也是通過 Spring 容器管理注冊的 bean 對象,只不過對象的實例化方式換成了注解,那么我們看到成功輸出在控制臺的測試語句,說明案例搭建完成。

3. 小結

本節帶著大家使用注解的方式,實現了 Spring 對于 bean 的管理。

那么回顧下注解開發的步驟和注意點:

  1. Spring 容器初始化一樣需要 xml 文件,目前是 xml 文件搭配注解管理 bean 并不是純注解開發;
  2. Spring 的 xml 配置文件中使用 context:component-scan 標簽指定注冊 bean 的類所在目錄位置;
  3. 自定義編寫的 Java 類,如果需要被自動掃描注入容器,必須搭配注解。
    學習的苦只是一時之苦,學不到的苦是一世之苦,與君共勉…