Spring 最小化Spring配置

2022-05-22 04:30:12 字數 2584 閱讀 4469

在spring的配置檔案中,我們可以使用元素定義bean,以及使用或著元素裝配bean,這對於包含少量bean的應用來說以經非常不錯了,但是隨著應用的發展,我們不得不編寫越來越複雜的xml配置。

為解決這個問題,spring提供了幾種技巧,可以幫助我們簡化xml的配置。

我們首先 舉乙個例子:

1.建立乙個singer類:

2.建立乙個instruments類繼承instrument介面

3.建立乙個singer.xml檔案:

4.測試方法:

5.執行結果

為了簡化上面案例的xml檔案配置,我們可以通過一下四種自動裝配bean的方案來實現

(1)byname自動裝配

在spring中,所有的東西都會賦予乙個名字,因此bean的屬性也會有名字,加入屬性的名字剛好與要被裝配到該屬性的bean的名字相同,那麼spring便可以通過byname的方式,將該bean自動裝配到對應屬性中。

執行結果:

注意 :若時xml檔案中存在多個singer的bean,且均已byname的形式自動裝配,那麼所有的singer類裝配的均為同乙個instrument。

若配置了byname自動裝配,而卻沒有id為instrument的bean,則singer中instrument為空。

(2)bytype自動裝配

其工作方式類似於byname自動裝配,只不過不是匹配名字,而是檢查屬性的型別。

執行結果:

注意:如果存在多個bean與需要裝配的屬性的型別都一致,那麼spring不會猜測那個bean更適合,而是選擇丟擲異常。例如:

(3)constructor 自動裝配

如果我們要通過構造器來注入bean,可以通過設定autowire="constructor" 來取代

元素。spring會自動匹配乙個構造器所有入參的bean,並自動注入。

注意:constructor 自動裝配和bytype自動裝配具有相同的侷限性,當發現多個bean匹配某個構造器的入參時,spring不會嘗試猜測哪個bean更適合自動裝配,此外,如果乙個類有多個構造器,且都滿足自動裝配條件時,spring也不會嘗試判斷哪個構造器更適合使用。

(4)最佳自動裝配

如果我們將autowire的屬性設定為autodetect,那麼spring便會為我們選擇最佳的自動裝配型別。

spring會首先嘗試使用constructor自動裝配,如果沒有發現型別匹配的bean,將會嘗試bytype自動裝配。

使用註解裝配

在使用基於註解裝配前,我們需要在spring配置中去啟用他。

使用 @autowired實現在動裝配

當我希望使用@autowired讓spring自動singer,我們可以在需要裝配的屬性對應的set方法上新增

@autowired注釋。例如:

結果:

@autowired 不僅可以用於標註set方法,還可以用來標註需要自動裝配bean的任意方法。包括構造方法。放@autowired對構造方法進行標註時,在spring的xml檔案中即使沒有使用元素配置bean,該構造器也會進行自動裝配

@autowired還可以標註類的屬性,刪除set方法。

執行結果:

注意:@autowired所標註的屬性,必須時可裝配的,如果沒用bean可以裝配到@autowired所標註的屬性中,便會丟擲異常。

讓spring盡早失敗,要好於在以後丟擲空指標異常。

有時候屬性不一非要裝配,null值也是可以的,我們可以使用@autowired的required屬性為false來配置自動裝配是可選的。

若required的值為false,當不存在可以裝配的bean時,該屬性配裝配為null.

最小化安裝 Ubuntu

ubuntu 的預設安裝方式或許並不為所有使用者所接受。譬如說吧,有的使用者並不想使用 gnome 桌面環境,也有的使用者並不需要預先安裝的所有軟體。為了解決上述諸如此類的問題,在安裝最小化的 ubuntu 的基礎上,根據各人之喜好執行定製化安裝,可能是較好的折中方案。首先,安裝 ubuntu 基本...

經驗風險最小化

前面提到,機器學習的目的就是根據一些訓練樣本 尋找乙個最優的函式,使得函式對輸入 x的估計y 與實際輸出y之間的期望風險 可以暫時理解為誤差 最小化。期望風險最小化 依賴於樣本的輸入 x與其輸出 y之間的函式對映關係f x,y 而這個對映關係,在機器視覺和模式識別系統中,一般指代先驗概率和類條件概率...

最小化到托盤

notifyicon notifyicon1 void inittraymenu 在建構函式時呼叫此函式 void notifyicon1 click object sender,eventargs e private void menuitem1 click object sender,syste...