Spring框架學習(九):創建bean的模式、注入.properties文件的配置項


在沒有任何附加的條件下,Spring創建對象的方式是單例模式,也就是說不管在什么地方注入多少次,使用的都是同一個bean。有時候這種模式並不能滿足我們的需求。

@Scope注解可以聲明創建bean的方式,以及bean的作用域。它可以與@Bean、@Component注解一起使用。看個例子:

    //ConfigurableBeanFactory.SCOPE_PROTOTYPE:原型模式,每次注入bean時都重新創建對象
    //ConfigurableBeanFactory.SCOPE_SINGLETON:單例模式,上下文中永遠只有一個bean
    @Bean
    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
    Homework homework(){
        return new Homework("1+2 = ?");
    }

另外,在一些應用場景下,我們會希望bean是有作用范圍的。比如說:購物車對象,每個用戶都應該有屬於自己的購物車,並且每次web會話中,購物車是不變的。對於一個用戶來說,每個對購物車的添加、刪除商品操作都是同一個購物車,而每個用戶只能操作自己的購物車。

這就不得不提一下@Scope的另外的參數:WebApplicationContext.SCOPE_SESSION、WebApplicationContext.SCOPE_REQUEST。使用這兩個值作為@Scope的參數,會創建出基於會話的bean、基於請求的bean。即每個會話創建一個bean、每個請求創建一個bean。當然了,對於web應用來說,光指定這個參數還不夠還需要設置@Scope的proxyMode屬性。就像下圖的例子:

 

 關於這個proxyMode是什么作用,你可以查閱相關資料,或者翻看《Spring實戰第四版》,這本書的鏈接:https://pan.baidu.com/s/1P9mV1PdHC1BhfHY9Dj3ngw 提取碼:f9jo。使用xml配置方式也可以做scope相關設置。

 

你有沒有想過將外部配置文件的字段注入到bean的屬性里面?比如數據庫信息。Spring為這提供了很好的實現方式:創建一個PropertySourcesPlaceholderConfigurer 類的bean,同時給它設定你的.properties文件的位置,就可以通過"${xxx.xxx}"占位符的方式訪問了。對於這塊如果看得有點迷糊,你可以在網上找一些例子,其實很簡單,或者在評論區給我留言。

如果這篇文章有幫到你,歡迎收藏、關注、點贊。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM