spring裝載bean的時候,可以依據不同環境(全域性變數值)對不同的bean進行初始化。這樣可以讓系統根據不同環境採用最佳實現方式。(開發環境、測試環境、qa環境、生產環境甚至是前端開發環境)
@profile
spring裝配bean的時候,可以依據不同的條件判定(系統環境變數值、依賴bean是否裝配、自定義表示式結果等)決定是否對bean進行裝配。
@conditional
當現實情況(乙個介面多個實現類)無法滿足自動裝配的條件(被裝配的bean有唯一的實現類)時,spring提供以下方式明確唯一的實現類
3.1 標示首選的bean
@primary
缺點是當@primary出現多次的話,spring一樣不知道應該採用哪個。
3.2 限定自動裝配的bean,對所有可選的bean進行篩選。其實刪選條件就是bean的id名。
@qualifier(「篩選條件」)
缺點是當bean的名字變更後,bean的id(預設的)也會隨之變更,此時篩選條件就失效了。
3.3 建立自定義的限定符,與3.2基本一致,只是為bean定義乙個固定的id,這樣bean名稱變更不會影響bean的id。篩選條件就不需要變更了。
缺點,如果自定義了相同的id名,spring一樣無法自動裝配。
3.4 使用自定義的限定符註解,原理與3.3相同,只是為乙個bean設定多個id,在裝配的地方也使用多個id進行篩選。例如如此定義乙個bean(食物、肉類、羊肉、切片),裝配時設定篩選條件(食物、肉類、羊肉、切片)。這樣spring就可以找到對應的類了。
缺點:sprnig不允許同乙個註解重複出現。需要自定義乙個繼承了@qualifier註解的註解。裝配時使用自定義的註解進行設定。
4.bean的生命週期
spring預設是採用單例模式建立例項的。不過單例並不能滿足所有情況。
spring支援以下四種模式:
單例:在整個應用中,只建立bean的乙個例項。
原型:每次注入或者通過spring應用上下文獲取的時候,都會建立乙個新的bean例項。
會話:在web應用中,為每個會話建立乙個bean例項。
請求:在web應用中,為每個請求建立乙個bean例項。
特殊情況:將會話bean注入到單例bean中。單例bean在專案啟動時建立,而此時會話bean並沒有建立,將導致自動裝配失敗。此時需要在會話bean註解中註明懶解析。這樣在單例bean構建時,spring會建立乙個**類去set屬性。當單例呼叫會話bean的時候,再使用當前會話內的bean例項代替**類去執行。
5.執行時值注入
執行時注入與普通注入的區別在於,普通注入的發生點在專案啟動時執行,執行時注入的發生點在專案執行過程中執行。
spring提供了兩種方式來實現執行注入
1. 屬性佔位符
2. spring表示式語句(spel)
Spring實戰系列 第三章 高階裝配
環境與profile spring.profiles.default spring.profiles.active 設定上述兩引數的方法 作為dispatcherservlet的初始化引數 作為web應用的上下文引數 作為jndi條目 作為環境變數 作為jvm的系統屬性 在繼承測試類上,使用 act...
opencv課後練習 第三章節2 4
題目2 建立乙個三通道二維矩陣,位元組型別,大小為100 100,並設定所有數值為0 a.在矩陣中使用void cvcircle cvarr img,cvpoint center,intradius,cvscalar color,int thickness 1,int line type 8,int...
第三章 高階特性
當要取list,tuple和str的某個元素到某個元素,除了逐個列出以外,還可以用切片 slice 來完成.使用方法 名字 起始index 結束index l michael sarah tracy bob jack l 0 3 michael sarah tracy 表示從起始索引開始,逐個取值,...