4 自動裝配(autowire)

2021-06-20 08:46:26 字數 3087 閱讀 8935

自動裝配bean的屬性值

模式說明

no             

byname  

根據屬性名自動裝配。此選項將檢查容器並根據名字查詢與屬性完全一致的bean,並將其與屬性自動裝配。例如,在bean定義中將autowire設定為by name,而該bean包含master

屬性(同時提供setmaster(..)

方法),spring就會查詢名為master的bean定義,並用它來裝配給master屬性。

bytype

如果容器中存在乙個與指定屬性型別相同的bean,那麼將與該屬性自動裝配。如果存在多個該型別的bean,那麼將會丟擲異常,並指出不能使用bytype

方式進行自動裝配。若沒有找到相匹配的bean,則什麼事都不發生,屬性也不會被設定。如果你不希望這樣,那麼可以通過設定dependency-check="objects"讓spring丟擲異常。

constructor

與bytype

的方式類似,不同之處在於它應用於構造器引數。如果在容器中沒有找到與構造器引數型別一致的bean,那麼將會丟擲異常。

autodetect

通過bean類的自省機制(introspection)來決定是使用constructor

還是bytype

方式進行自動裝配。如果發現預設的構造器,那麼將使用bytype

方式。1、byname的用法:

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

autowire="byname">

byname方式,master的屬性dog雖然沒有配置,但是spring容器會自動查詢id為dog的bean,然後賦給master的dog屬性,這時按名字自動裝配。

byname尋找和屬性名相同的bean,若找不到,則裝配不上。

2、bytype的用法:尋找和屬性型別相同的bean,找不到,裝配不上,找到多個拋異常。

3、constructor:查詢和bean的構造引數一致的乙個或多個bean,若找不到或找到多個,拋異常,按照引數的型別裝配

4、autodetect:3和2之間選乙個方式。不確定性的處理與3和2一致,建構函式方式優先

5、default:這個需要在,當你在中指定了default-autowire後,的、所有的bean的預設的autowire就是指定的裝配方法;

如果沒有在沒有default-autowire="指定",則預設是default-autowire=「no」

6、no:不自動裝配,這是autowire的預設方式。

7、混合使用手動和自動組裝

8、spring2.5提供了配置,該配置可以啟用在類中探測到的各種註解,@requested  @autowire  @postconstrct  @predestroy  @resource   @ejb  @persistencecontext  @webserviceref等等,也可以選擇為這些註解啟用單獨的後處理器。

例如:autowiredannotationbeanpostprocessor(處理自動裝配),commonannotationbeanpostproccessor(生命週期等)

注意,該標誌不能啟用事務處理,需要使用tx:annotation-driven

9、使用spring的特殊bean

讓spring特殊對待這些bean。使它們可以:

1)通過配置後加工bean,涉及到bean和bean工廠生命週期。

2)改變依賴注入,將字串轉換為其他型別

3)從屬性文字裝載資訊,包括資訊國際化。

4)監聽並處理其他bean及spring發布的系統訊息。

5)知道自己在spring中的唯一標識。

在配置檔案中可以配置三種bean:一種是我們自己寫的bean,一種是別人寫的打包給我們的,第三種就是spring本身提供的特殊bean

如對bean進行後處理的beanpostprocessor介面提供機會來修改bean。

public inte***ce beanpostprocessor

public void setdriver(string driver)

public string geturl()

public void seturl(string url)

public string getname()

public void setname(string name)

public string getpwd()

public void setpwd(string pwd)

}

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

db.properties

name=scott

driver=oracle:jdbc:driver:oracledriver

url=jdbc:oracle:thin:@127.0.0.1:1521:cdtax

pwd=tiger

db2.properties

db2.name=scott2

db2.driver=oracle:jdbc:driver:oracledriver2

db2.url=jdbc:oracle:thin:@127.0.0.1:1521:cdtax2

db2.pwd=tiger2

package com.cdtax.dispatch;

}

執行結果:

driver:=oracle:jdbc:driver:oracledriver

name:=scott

url:=jdbc:oracle:thin:@127.0.0.1:1521:cdtax

pwd:=tiger

driver:=oracle:jdbc:driver:oracledriver2

name:=scott2

url:=jdbc:oracle:thin:@127.0.0.1:1521:cdtax2

pwd:=tiger2

自動裝配(Autowire)

了解 自動裝配 autowire 自動裝配表現為不需要配置 節點來注入,spring會自動的為屬性注入值!在 節點中新增 autowire 屬性以配置自動裝配。重要 當取值為 byname 時,表示 根據名稱 自動裝配,即spring會檢查這個bean的所有的屬性名稱,然後在spring管理的所有b...

autowire自動裝配

autowire自動裝配 auto自動裝配就是在要使用bean的時候進行自動注入 注意!自動注入只能注入引用資料型別和自定義類,其中基礎資料型別和string資料型別不能自動注入,自動注入也沒有意義,會報錯。解釋 我們自動注入注入的是有效的屬性值,針對自定義類,只能注入例項,那注入的就是乙個例項,這...

Java spring自動裝配Bean的4種方式

spring自動裝配bean有4種方式 第一種 autowire default 即no 第二種 autowire byname 即,根據屬性的名稱裝載 第三種 autowire bytype 即根據屬性的型別進行裝載bean 或者通過註解的方式也可以根據工廠裝配 autowired private...