天天看點

Spring架構自動裝配

Spring自動裝配

  • autowire屬性

    在spring中的配置檔案元素中有一個屬性autowire 負責的是自動裝配标簽的定義Javabean的屬性。

    Spring架構自動裝配
  • Spring架構支援5種自動裝配的模式

1.no-------預設情況下不自動裝配,使用 ref="裡面所設定的id值 "手動裝配

2.byName------根據設定autowire=“byName” 的這個中property的name值,去找另一個的,然後自動裝配到這個中

3.byType------根據Property的name的資料類型(Type)自動裝配,如果一個bean的資料類型,相容另一個bean中property的資料類型,則自動裝配。

4.constructor --------根據構造函數參數的資料類型,進行byType模式的自動裝配。

5.autodetect --------如果發現預設的構造函數,用constructor模式,否則,用byType模式。

  • 舉例說明

    1.預設no(不會自動裝配)

    預設情況下,set注入的方式,需要通過’ref’來裝配bean,分别有Person類和Student類,

    其中Person類中建立有Student的對象(private Student student;)

    Spring架構自動裝配

    2.byName

    建立了一個Animal類和Dog類,在Animal類中建立Dog類型的對象,animal設定了autowire=“byName”,Spring自動去尋找與屬性名"dog"相同的中id的值,找到的話,通過調用setName(String name)将其注入屬性

    Spring架構自動裝配
    如果沒有找到,會報空指針異常
    Spring架構自動裝配

    3.byType

    animal設定了autowire=“byType”,Spring自動去尋找與屬性名"dog"類型相同的中id的類型,找到的話,通過調用setName(String name)将其注入屬性

    Spring架構自動裝配
    如果配置檔案中有兩個類型相同的bean會怎樣呢?如下:
    Spring架構自動裝配
    一旦配置如上,有兩種相同資料類型的bean被配置,将抛出UnsatisfiedDependencyException異常,見以下:
    Spring架構自動裝配

    4.constructor

    animal設定了autowire=“constructor”,Spring自動去尋找與參數類型相同的,找到後,通過 public Animal(Dog dog) { this.dog = dog; }将其注入

構造方法:

Spring架構自動裝配
Spring架構自動裝配

注意點:

自動裝配雖然讓開發變得更快速,但是同時卻要花更大的力氣維護,因為它增加了配置檔案的複雜性,你甚至不知道哪一個bean會被自動注入到另一個bean中。通常大家都會用set的方式進行裝配.

繼續閱讀