【Spring實戰】高級裝配

1.處理自動裝配的歧義性

 

自動裝配的時候,僅有一個bean匹配所需的結果時,自動裝配纔是最有效的,如果不僅有一個Bean能夠匹配結果的話,這種歧義性會阻礙Spring自動裝配屬性、構造參數或者方法參數。如上圖所示

當確實發生歧義性的時候,Spring提供了多種可選方案來解決這樣的問題。你可以將可選Bean中的某一個設爲首選(primary)的bean,或者使用限定符(qualifier)來幫助Spring將可選bean的範圍到只有一個Bean。

1.1標示首選的bean

@Primary能夠與@Component組合用在組件掃描的bean上,也可以與@Bean組合用在Java配置的bean聲明中。

如下圖所示距離

 1.2限定自動裝配的bean

@Qualifier註解是使用限定符的主要方式。它可以與@Autowired和@Inject協同使用,在注入的時候指定想到注入進去的是哪個bean

如圖所示

爲限定符@Qualifier註解所設置的參數就是想要注入的bean的ID。所有使用@Component註解聲明的類都會創建爲bean,並且Bean的ID的首字母變爲小寫的類名。

但是會存在一些問題,如下圖所示

 

2.bean的作用域

在默認情況下,Spring應用上下文所有的Bean都是作爲以單例的形式創建的。

Spring中定義了多種作用域,可以基於這種作用域創建bean

包括:

  1. 單例——在整個應用中只創建一個bean
  2. 原型——每次注入或者通過Spring應用上下文獲取的時候,都會創建一個新的bean的實例。
  3. 會話——在web應用中,爲每個會話創建一個實例
  4. 請求——在web應用中,爲每個請求創建一個bean的實例。

如果你是用組件掃描發現和聲明Bean,那麼你可以在Bean的類上使用@Scope註解將其聲明爲原型bean,如下圖所示

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章