今天是劉小愛自學Java的第121天。
感謝你的觀看,謝謝你。
在spring核心配置文件中,有一個bean標籤,我們以前創建一個對象都是直接new。
而在spring中可以將對象交給spring管理,再通過spring工廠直接獲取。
所以我們也稱之為spring容器。
今天的學習內容就是關於bean標籤:
Bean的作用域:單例與多例說明。
Bean屬性依賴注入的兩種方式,以及p名稱空間、seEL表達式的引入。
補充說明一個IDEA插件。
一、bean的作用域
作用域也就是指:由spring創建的bean對象在什麼情況下有效?主要有單例和多例兩種。
在spring核心配置文件中可以配置對象是單例還是多例,通過scope屬性設定:
值為singleton即為單例,默認值,可省略。
值為prototype即為多例。
1單例測試
多次獲取單例對象,並列印輸出。
我們會發現:如果是單例的話,構造方法只運行一次,多次獲取的是同一個對象。
在spring IOC容器中僅存在一個bean實例,bean以單例方式存在。
注意:這邊我大致提下,昨天忘記說明了,通過spring工廠獲取對象時,參數可以是id,也可以是bean的類型,也就是對應接口/類的Class對象。
使用id獲取最穩妥,如果根據類型獲取,配置了多個類型的話,會拋出異常。
2多例測試
多次獲取單例對象,並列印輸出。
我們會發現:多例構造方法會運行多次,多次獲取的都是不同的對象。
每次從容器中調用bean時,都會返回一個新的實例,即每次調用getBean()的時候,相當於new了一次bean對象。
二、bean屬性的依賴注入
什麼是Bean屬性的依賴注入?
就可以理解成對一個對象的屬性賦值,這個我們昨天就接觸過,其有兩種注入方式:
1構造器參數注入 constructor-arg
創建Car類,定義構造方法
既然是通過構造器參數注入,那肯定需要有參構造方法,其中為了方便測試時觀看,還在該類中重寫一個toString方法。
spring配置構造器參數
constructor-arg:該標籤相當於在告訴spring容器,要調用有參構造方法了,不再調用默認的構造方法了。
所以必須要有有參構造方法,不然會報錯。
index:根據索引定位屬性,0表示首位。
name:根據屬性參數名稱定位屬性。
type:根據屬性數據類型定位屬性。
value:簡單的值,字符串。
ref:複雜的值,就是通過該屬性可以引用由spring容器創建的其它bean對象。
一般都是使用name屬性賦值,這樣最合理,也一目了然,name和type這兩種都不靠譜。
配置完成,做一個測試
根據運行結果我們能發現,通過spring的配置,可以給對象初始化賦值。
也就相當於new Car(1,"長安",20000)。
通過spring就不需要我們自己new了。
2setXXX方法屬性注入
和上述構造器參數注入的效果是差不多的,只不過setXXX方法更具有選擇性。
構造器參數注入有幾個參數都得設置,少一個都不行,而該方法想設置哪個就設置哪個。
創建Person類,定義setXXX方法
使用Lombok插件可以快速創建一個Javabean,這個插件文章最後有說明。
spring配置setXXX方法參數
property標籤:spring中專門進行setXXX屬性注入的標籤 。
name:setXXX方法的屬性名字,例如setXXX()那麼name的屬性值為XXX。
value:簡單的值。
ref:複雜的值,引用由spring容器創建的其它bean對象的名字。
配置完成,做一個測試
根據運行結果我們能發現,通過spring的setXXX方法屬性注入,也可以給對象賦值。
該方法也就相當於通過對象調用方法setId(1),setName(「劉小愛」)…
三、p名稱空間和spEL表達式
為簡化XML文件的配置,Spring2.5版本開始引入了一個新的p名稱空間。
準確地說,它的作用是為了簡化setXXX方法屬性依賴注入配置的,使用方式如下圖:
在配置文件表頭,引入p名稱空間。
可以將property標籤直接作為屬性使用。
如果是引用簡單對象,直接用屬性名說明即可,比如p:id,p:name。
如果是引用複雜對象,需要用ref來補充說明,比如p:car-ref。
通過上圖,我們能發現p名稱空間能進一步地簡化了代碼的編寫。
2spEL表達式
spEL全稱Spring Expression Language,一種表達式語言,和前面學的EL表達式很像。
語法:#{…} ,通過該表達式可以引用屬性、另一個Bean、甚至運算,方法都可以。
spEL表達式的使用功能比較多,Bean操作相關的通常有:
# 引用Bean,比如#。
# 引用Bean的屬性,比如#。
# 調用Bean的方法
附:補充一個Lombok插件
在idea開發工具中,選擇File-settings,找到Plugins,在搜索框中搜索lombok。
如果以前沒使用過該插件,右側下載即可。
插件下載好後,還需要導入依賴才能使用。
在maven網站中找到lombok,隨便選擇一個版本,將依賴複製到我們項目對應的pom文件中即可。
依賴導入完畢,就可以使用該插件了。
它有什麼用呢?
我們以前創建一個標準的JavaBean,有構造方法,有getset方法,有toString方法,一下子要寫很多方法。
但是現在有了lombok插件後,只需要在類上加一個注釋@Data,這些方法就都不用寫了。
最後
謝謝你的觀看。
如果可以的話,麻煩幫忙點個讚,謝謝你。