【框架】121:spring框架之IOC容器

今天是劉小愛自學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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索