今天是劉小愛自學Java的第121天。web
感謝你的觀看,謝謝你。spring
在spring核心配置文件中,有一個bean標籤,咱們之前建立一個對象都是直接new。微信
而在spring中能夠將對象交給spring管理,再經過spring工廠直接獲取。maven
因此咱們也稱之爲spring容器。編輯器
今天的學習內容就是關於bean標籤:ide
-
Bean的做用域:單例與多例說明。 -
Bean屬性依賴注入的兩種方式,以及p名稱空間、seEL表達式的引入。 -
補充說明一個IDEA插件。
1、bean的做用域
做用域也就是指:由spring建立的bean對象在什麼狀況下有效?主要有單例和多例兩種。工具
在spring核心配置文件中能夠配置對象是單例仍是多例,經過scope屬性設定:學習
-
值爲singleton即爲單例,默認值,可省略。 -
值爲prototype即爲多例。
1單例測試開發工具
屢次獲取單例對象,並打印輸出。測試
咱們會發現:若是是單例的話,構造方法只運行一次,屢次獲取的是同一個對象。
在spring IOC容器中僅存在一個bean實例,bean以單例方式存在。
注意:這邊我大體提下,昨天忘記說明了,經過spring工廠獲取對象時,參數能夠是id,也能夠是bean的類型,也就是對應接口/類的Class對象。
使用id獲取最穩妥,若是根據類型獲取,配置了多個類型的話,會拋出異常。
2多例測試
屢次獲取單例對象,並打印輸出。
咱們會發現:多例構造方法會運行屢次,屢次獲取的都是不一樣的對象。
每次從容器中調用bean時,都會返回一個新的實例,即每次調用getBean()的時候,至關於new了一次bean對象。
2、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(「劉小愛」)…
3、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的Id} 引用Bean,好比#{car}。
-
#{bean的Id.屬性} 引用Bean的屬性,好比#{person1.name}。
-
#{bean的Id.方法(參數)} 調用Bean的方法
附:補充一個Lombok插件
在idea開發工具中,選擇File-settings,找到Plugins,在搜索框中搜索lombok。
若是之前沒使用過該插件,右側下載便可。
插件下載好後,還須要導入依賴才能使用。
在maven網站中找到lombok,隨便選擇一個版本,將依賴複製到咱們項目對應的pom文件中便可。
依賴導入完畢,就可使用該插件了。
它有什麼用呢?
咱們之前建立一個標準的JavaBean,有構造方法,有getset方法,有toString方法,一會兒要寫不少方法。
可是如今有了lombok插件後,只須要在類上加一個註釋@Data,這些方法就都不用寫了。
最後
謝謝你的觀看。
若是能夠的話,麻煩幫忙點個贊,謝謝你。
本文分享自微信公衆號 - 劉小愛(liuxiaoai946)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。