初識Spring —— Bean的裝配(一)

胖若倆人發表於2018-06-09

初識Spring —— Bean的裝配(一)

這篇文章來自我的部落格

正文之前

終於開始學 Spring 了,接觸到的第一個內容就是 Bean,所以想要用兩篇文章來總結一下自己所學的

第一篇有兩個內容:

  1. JavaBean 的概念
  2. Spring 裝配 Bean

正文

1. JavaBean 的概念

JavaBean 是什麼

這裡的 Bean 當然不是直譯過來的意思,關於Bean的定義,維基百科解釋的很清楚了:

JavaBeans 是 Java 中一種特殊的類,可以將多個物件封裝到一個物件(bean)中,特點是可序列化,提供無參構造器,提供 getter 方法和 setter 方法訪問物件的屬性。名稱中的 "Bean" 是用於Java的可重用軟體元件的慣用叫法

Bean的例子
  1. 建立Bean類
import java.io.Serializable;

public class UserBean implements Serializable {
    //變數宣告為私有
    private String play;
    private Boolean isUser;

    //無參構造器
    public UserBean(){}

    //常規 set、get操作
    public void setPlay(String play) { this.play = play; }
    
    public String getPlay() { return play; }
    
    public void setUser(Boolean user) { isUser = user; }

    //布林型別的 getter 採用了不同的名稱,用 is 更加能表示型別
    public Boolean isUser() { return isUser; }
}
複製程式碼

  1. 使用Bean類
public class UserBeanTest {
    public static void main(String[] args){
        //例項化
        UserBean userBean = new UserBean();
        userBean.setPlay("I want to play");
        userBean.setUser(true);

        //如果是使用者,就列印語句
        if(userBean.isUser()){
            System.out.println(userBean.getPlay());
        }
    }
}
複製程式碼

引用《Spring實戰》(Spring in action) 中的一句話:

在傳統的Java應用中,bean的生命週期很簡單。使用Java關鍵字new進行bean例項化,然後該bean就可以使用了。一旦該bean不再被使用,則由Java自動進行垃圾回收

2. Spring 中的 Bean

在 Spring 中,我們對 Bean 進行配置並加以使用,來得到我們需要的結果

在上述的例子中,如果我們要建立一個 Bean,我們就要使用關鍵字 New,但是,在 Spring 中,Bean 的建立是由 Spring 容器進行的,也就是說,在 Spring 中使用 Bean 的時候,不是由關鍵字 New 來建立例項了

今天主要說說 Spring 中單個 Bean 的裝配,只有一個 Bean,下一篇文章會講述 DI(依賴注入):

  1. 自動裝配
  2. 使用 XML 裝配
  3. 使用 Java 裝配
1. 自動裝配

引用《Spring實戰》中的一句話:儘管你會發現這些顯示裝配技術非常有用,但是在便利性方面,最強大的還是 Spring 的自動化配置

我們用一個 Demo 來做解釋,首先建立兩個類:Student 類和 StudentTest 類,以及一個配置檔案 spring-config.xml:

初識Spring —— Bean的裝配(一)

我們要先編寫配置檔案,使其啟用元件掃描,來發現帶有註解 @Component 註解的類,因為我之前由寫過關於 Spring MVC 的 demo,所以有關 @Component@Service@Controller 的區別做一個小小的解釋(個人理解):

@Component 泛指元件類,就是在自身定位不明確的時候使用,比如我們這個Demo @Service 表明這是業務層的元件 @Controller 表明這是控制層的元件 在業務層和控制層也可以用 @Component,但是這會導致程式碼不易讀

回到配置檔案:

初識Spring —— Bean的裝配(一)

這一行:

<context:component-scan base-package="bean"/>
複製程式碼

指示了 Spring 要掃描的元件所處於的位置(包名),如果不設定 base-package,則掃描配置檔案所處於的包

然後我們看一下 Student 類:

初識Spring —— Bean的裝配(一)

這裡只是為了測試,所以極大程度地簡化,只需要一句控制檯輸出語句

由於我們之前配置了元件掃描,所以點選旁邊的標誌,就能夠跳轉到我們新增了 @Component 註解的 Student 類

初識Spring —— Bean的裝配(一)

萬事俱備,就差測試了,我們使用 Junit 來進行測試,需要匯入兩個 JAR:

junit-4.12.jar hamcrest-all-1.3.jar

初識Spring —— Bean的裝配(一)

針對測試檔案中的內容一步一步來:

  • @RunWith:這個單元測試指定的執行類(目前還不是很瞭解)
  • @ContextConfiguration:配置檔案的位置,因為我是用 XML 檔案進行配置,所以填寫配置檔案位置
  • @Autowired:自動裝配 Bean,在這裡可以看到沒有使用 New 關鍵字,但是能夠在執行時得到這個 Bean
  • @Test:執行測試的方法

初識Spring —— Bean的裝配(一)

能夠看到控制檯輸出了 Student 類中的語句,證明裝配成功

2. 使用 XML 裝配

這一篇文章講述的只是簡單的裝配,所以有很多有關依賴注入的方式都將跳過,由下一篇文章來講

所以這裡只演示在 XML 檔案中建立一個 Bean 並進行裝配

首先我們新建一個配置檔案 spring-bean.xml:

初識Spring —— Bean的裝配(一)

在其中建立用元素建立一個叫做“student”的 Bean,class屬性用來指定 Bean 的型別

然後我們修改測試檔案中的上下文的配置資訊:

初識Spring —— Bean的裝配(一)

我們將 @ContextConfiguration 註解的值改為了配置 Bean 的檔案

輸出結果:

初識Spring —— Bean的裝配(一)

證明裝配成功

3. 使用 Java 裝配

在《Spring實戰》中大力推崇使用 Java 作為裝配,可能是我不太習慣,之前都是把配置資訊寫在 XML 檔案裡,不過這裡還是要說一下:

我們將建立一個類,作為存放配置資訊的類,先加上 @Configuration,說明這是一個配置類:

初識Spring —— Bean的裝配(一)

接下來,我們要在配置類中使用一個註解:@Bean

我們在配置類中寫一個方法,這個方法能夠建立所需要的例項並將其返回,並將 @Bean 新增至這個方法,這個方法的名稱是作為 Bean 預設的名稱:

初識Spring —— Bean的裝配(一)

然後我們要修改測試類,將配置上下文的檔案改為 StudentConfig.class,表明 Java 配置類的位置:

初識Spring —— Bean的裝配(一)

然後得出測試結果,證明裝配成功:

初識Spring —— Bean的裝配(一)

關於剛才說到的方法的名稱是作為 Bean 預設的名稱,這裡做個測試:

先修改配置類中的方法名,加一個字元“s”:

初識Spring —— Bean的裝配(一)

然後修改測試類,在這個測試中,我們沒有建立例項,只是測試一下看看能不能在上下文中發現這個 Bean :

初識Spring —— Bean的裝配(一)

測試後,丟擲 NoSuchBeanDefinitionException,表示沒有發現名叫“student”的 Bean

初識Spring —— Bean的裝配(一)

如果我把剛才修改的方法名改回來,就會通過測試:

初識Spring —— Bean的裝配(一)

關於最基礎的 Bean 的裝配就說到這裡了,下一篇文章中將會詳細講述這三種方式的細節

相關文章