Spring(三)之自動裝配 表示式

2021-09-22 23:28:12 字數 3176 閱讀 9222

依賴檢查

spring表示式

自動裝配(autowire)協作者

spring ioc容器可以自動裝配(autowire)相互協作bean之間的關聯關係。因此,如果可能的話,可以自動讓spring通過檢查beanfactory中的內容,來替我們指定bean的協作者(其他被依賴的bean)。

autowire一共有五種型別。由於autowire可以針對單個bean進行設定,因此可以讓有些bean使用autowire,有些bean不採用。autowire的方便之處在減少或者消除屬性或構造器引數的設定,這樣可以給我們的配置檔案會更精簡!

模式說明

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方式。

autowire.restaurant

package autowire;

public

class restaurant

public waiter getwt()

public

void

setwt(waiter wt)

@override

public string tostring()

}

autowire.waiter

package autowire;

public

class waiter

}

根據byname查詢xml檔案

id="wt"

class="autowire.waiter">

bean>

id="rest"

class="autowire.restaurant"

autowire="byname">

bean>

* 結果:*

waiter的無參構造。。

restaurant無參構造

restaurant的set方法。。。。

restaurant [wt=autowire.waiter@43814d18]

byname:查詢id等於屬性名的bean,然後呼叫set完成注入

如果找不到對應的bean,會注入null;

注意:a.有參構造

b.有set方法

根據bytype查詢xml檔案

id="wt1"

class="autowire.waiter">

bean>

id="rest"

class="autowire.restaurant"

autowire="bytype" >

bean>

* 結果:*

waiter的無參構造。。

restaurant無參構造

restaurant的set方法。。。。

restaurant [wt=autowire.waiter@3701eaf6]

bytype:查詢與屬性型別一致的bean,然後set方法注入

如果找不到對應的bean會注入null;

找到多個報錯

注意:a.有參構造

b.有set方法

注意:容器預設情況下,禁止自動裝配。如果直接使用property和constructor-arg注入依賴的話,那麼將總是覆蓋自動裝配。

檢查bean定義中實際屬性值的設定.

依賴檢查預設為not,它有幾種不同的使用模式,在xml配置檔案中,可以在bean定義中為dependency-check屬性使用以下幾種值:

模式說明

none

沒有依賴檢查,如果bean的屬性沒有值的話可以不用設定。

******

對於原始型別及集合(除協作者外的一切東西)執行依賴檢查

object

僅對協作者執行依賴檢查

all對協作者,原始型別及集合執行依賴檢查

讀取bean或者集合的屬性值。語法類似el表示式

使用spring表示式讀取其它的bean的屬性值。

#:讀取id等於eb的bean的name屬性值。

#:讀取id等於eb的bean的cities屬性值(cities是乙個list,讀取的是下標等於0的元素的值)。

cities屬性值(cities是乙個list,讀取的是下標等於0的元素的值)。

#:讀取id等於eb的bean的

score屬性值(score是乙個map,讀取的是key等於math的value值)。

#:讀取id等於config的

bean的pagesize屬性值(pagesize是properties中的key)。

class="basic.somebean">

name="name" value="#"/>

name="city"

value="#"/>

name="score"

value="#"/>

name="pagesize"

value="#"/>

三 Spring之屬性賦值和自動裝配

1 基本數值 2 可以寫spel 3 可以寫 取出配置檔案 properties 中的值 在執行環境變數裡面的值 這樣可以給person類的屬性賦預設值 public class person private integer age value private string nickname 給方法...

Spring3 x 使用SpEL表示式裝配

我們為bean的屬性和構造器引數裝配的所有東西都是在spring的xml配置檔案中靜態定義的。同樣我們裝配其他bean的引用也都是在配置spring配置檔案時就已經確定了。但是,我們為屬性裝配的值在執行期才能知道,那又如何實現呢?spring3引入了spring表示式語言,spel。spel是一種強...

Spring 切點表示式

摘要 spring中的aspectj切點表示式函式 切點表示式函式就像我們的gps導航軟體。通過切點表示式函式,再配合萬用字元和邏輯運算子的靈活運用,我們能很好定位到我們需要織入增強的連線點上。經過上面的鋪墊,下面來看看springz中支援的切點表 spring中的aspectj切點表示式函式 切點...