Spring Bean的自動裝配

2021-08-04 15:01:56 字數 2035 閱讀 3964

乙個bean使用其他的bean,除了顯式的配置xml檔案外,也可以通過配置< bean >的autowire屬性來實現bean的自動裝配。自動裝配的好處是減少了構造器注入和setter注入配置(其實就是少了< property >標籤,但是bean裡面set方法還是必須的),減少了配置檔案的長度。

spring 3.0支援以下4種自動裝配模式:

模式描述

no預設的設定,它意味著沒有自動裝配,此時應該顯式配置bean

byname

根據屬性名自動裝配。spring容器將根據名字查詢與屬性完全一致的bean,然後將其自動裝配

bytype

根據屬性型別自動裝配。如果容器中存在乙個與指定型別相同的bean,那麼將與該屬性自動裝配;如果存在多個該型別的bean,那麼丟擲異常,提示不能使用bytype方式進行自動裝配;如果沒有找到相匹配的bean,那麼不會發生任何事

constructor

與bytype方式類似,不同的是它應用於構造器引數。如果沒有找到對應型別的bean,那麼將會丟擲異常

下面以bytype方式為例進行演示:

首先建立乙個autowiringservice類(set方法還是必須要寫的):

package com.spring.test;

public

class autowiringservice

public

void

say(string s)

}

然後建立乙個的依賴類autowiringdao:

public

class autowiringdao

}

xml配置檔案:

<?xml version="1.0" encoding="utf-8"?>

xmlns=""

xmlns:xsi=""

xsi:schemalocation="

/spring-beans-3.0.xsd">

id="autowiringservice"

class="com.spring.test.autowiringservice"

autowire="bytype">

bean>

id="autowiringdao"

class="com.spring.test.autowiringdao">

bean>

beans>

測試類:

public

public

static

void

main(string args)

}

測試結果:如果配置了多個依賴型別的bean,那麼bytype的方式就會報錯:

xml檔案配置:

id="autowiringservice"

class="com.spring.test.autowiringservice"

autowire="bytype">

bean>

id="autowiringdao"

class="com.spring.test.autowiringdao">

bean>

id="autowiringdao2"

class="com.spring.test.autowiringdao">

bean>

如果覺得對每個bean都配置乙個autowire太麻煩,那麼可以通過全域性的< beans >的default-autowire屬性來指定所有的bean的自動裝配方式:

""  

xmlns:xsi=""

xsi:schemalocation="

/spring-beans-3.0.xsd"

default-autowire="bytype">

...

spring bean的自動裝配

spring bean的自動裝配 在spring框架應用場景中會有這麼一種情況。乙個bean在不同的使用類裡面都要配置。這個bean相對來說是單獨的。也就是說如果要裝配這個bean.在不同的使用類裡面都需要寫相關的 注入 那有沒有這麼一種方式。可以通過配置自動的來注入bean到相關的屬性中去。spr...

Spring Bean的自動裝配

當bean的屬性很少的時候,我們對它進行配置的時候就使用很少的或者元素進行裝配,但是隨著工程體積的增大,bean也可能變得複雜,這時候配置檔案也會變得複雜,和就會變得很多,寫起來就會很費勁,還好spring為我們提供了自動裝配的機制。spring ioc容器可以自動裝配bean,只需要在的autow...

學習spring bean自動裝配

spring 容器可以在不使用和元素的情況下 自動裝配 相互協作的 bean 之間的關係,這有助於減少編寫乙個大的基於 spring 的應用程式的 xml 配置的數量。下列自動裝配模式,它們可用於指示 spring 容器為來使用自動裝配進行依賴注入。你可以使用元素的 autowire 屬性為乙個 b...