關(guān)于Java中Bean的作用域詳解
1.作用域定義
限定程序中變量的可?范圍叫做作?域,或者說(shuō)在源代碼中定義變量的某個(gè)區(qū)域就叫做作?域。
? Bean 的作?域是指 Bean 在 Spring 整個(gè)框架中的某種?為模式,?如 singleton 單例作?域,就表示 Bean 在整個(gè) Spring 中只有?份,它是全局共享的,那么當(dāng)其他?修改了這個(gè)值之后,那么另?個(gè)?讀取到的就是被修改的值。
2.Bean 的 6 種作用域
Spring 容器在初始化?個(gè) Bean 的實(shí)例時(shí),同時(shí)會(huì)指定該實(shí)例的作?域。
Spring常見(jiàn)的有 6 種作?域,最后四種是基于 Spring MVC ?效的:
- singleton:?jiǎn)卫?域
- prototype:原型作?域(多例作?域)
- request:請(qǐng)求作?域
- session:會(huì)話作?域
- application:全局作?域
- websocket:HTTP WebSocket 作?域
注意后 4 種狀態(tài)是 Spring MVC 中的值,在普通的 Spring 項(xiàng)?中只有前兩種
singleton
- 官?說(shuō)明:(Default) Scopes a single bean definition to a single object instance for each Spring IoC container.
- 描述:該作?域下的Bean在IoC容器中只存在?個(gè)實(shí)例:獲取Bean(即通過(guò)applicationContext.getBean等?法獲?。┘把b配Bean(即通過(guò)@Autowired注?)都是同?對(duì)象。
- 場(chǎng)景:通常?狀態(tài)的Bean使?該作?域。?狀態(tài)表示Bean對(duì)象的屬性狀態(tài)不需要更新
- 備注:Spring默認(rèn)選擇該作?域
prototype
- 官?說(shuō)明:Scopes a single bean definition to any number of object instances.
- 描述:每次對(duì)該作?域下的Bean的請(qǐng)求都會(huì)創(chuàng)建新的實(shí)例:獲取Bean(即通過(guò)applicationContext.getBean等?法獲?。┘把b配Bean(即通過(guò)@Autowired注?)都是新的對(duì)象實(shí)例。
- 場(chǎng)景:通常有狀態(tài)的Bean使?該作?域
request
- 官?說(shuō)明:Scopes a single bean definition to the lifecycle of a single HTTP request. That is, each HTTP request has its own instance of a bean created off the back of a single bean definition. Only valid in the context of a web-aware Spring ApplicationContext.
- 描述:每次http請(qǐng)求會(huì)創(chuàng)建新的Bean實(shí)例,類(lèi)似于prototype
- 場(chǎng)景:?次http的請(qǐng)求和響應(yīng)的共享Bean
- 備注:限定SpringMVC中使?
session
- 官?說(shuō)明:Scopes a single bean definition to the lifecycle of an HTTP Session. Only valid in the context of a web-aware Spring ApplicationContext.
- 描述:在?個(gè)http session中,定義?個(gè)Bean實(shí)例
- 場(chǎng)景:?戶(hù)回話的共享Bean, ?如:記錄?個(gè)?戶(hù)的登陸信息
- 備注:限定SpringMVC中使?
application(了解)
- 官?說(shuō)明:Scopes a single bean definition to the lifecycle of a ServletContext. Only valid in the context of a web-aware Spring ApplicationContext.
- 描述:在?個(gè)http servlet Context中,定義?個(gè)Bean實(shí)例
- 場(chǎng)景:Web應(yīng)?的上下?信息,?如:記錄?個(gè)應(yīng)?的共享信息
- 備注:限定SpringMVC中使?
websocket(了解)
- 官?說(shuō)明:Scopes a single bean definition to the lifecycle of a WebSocket. Only valid in the context of a web-aware Spring ApplicationContext.
- 描述:在?個(gè)HTTP WebSocket的?命周期中,定義?個(gè)Bean實(shí)例
- 場(chǎng)景:WebSocket的每次會(huì)話中,保存了?個(gè)Map結(jié)構(gòu)的頭信息,將?來(lái)包裹客戶(hù)端消息頭。第?次初始化后,直到WebSocket結(jié)束都是同?個(gè)Bean。
- 備注:限定Spring WebSocket中使?
單例作?域(singleton) VS 全局作?域(application)
- singleton 是 Spring Core 的作?域;application 是 Spring Web 中的作?域;
- singleton 作?于 IoC 的容器,? application 作?于 Servlet 容器。
3. 設(shè)置作?域
使? @Scope 標(biāo)簽就可以?來(lái)聲明 Bean 的作?域,?如設(shè)置 Bean 的作?域,如下代碼所示:
@Component public class Users { @Scope("prototype") @Bean(name = "u1") public User user1() { User user = new User(); user.setId(1); user.setName("Java"); // 【重點(diǎn):名稱(chēng)是 Java】 return user; } }
@Scope 標(biāo)簽既可以修飾?法也可以修飾類(lèi),@Scope 有兩種設(shè)置?式:
- 直接設(shè)置值:@Scope("prototype")
- 使?枚舉設(shè)置:@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
到此這篇關(guān)于關(guān)于Java中Bean的作用域詳解的文章就介紹到這了,更多相關(guān)Bean的作用域內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java簡(jiǎn)單實(shí)現(xiàn)多線程及線程池實(shí)例詳解
這篇文章主要為大家詳細(xì)介紹了java簡(jiǎn)單實(shí)現(xiàn)多線程,及java爬蟲(chóng)使用線程池實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03通過(guò)實(shí)例解析Spring組合注解與元注解
這篇文章主要介紹了通過(guò)實(shí)例解析Spring組合注解與元注解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11Java構(gòu)造器(構(gòu)造方法)與方法區(qū)別說(shuō)明
這篇文章主要介紹了Java構(gòu)造器(構(gòu)造方法)與方法區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09Java數(shù)組隊(duì)列概念與用法實(shí)例分析
這篇文章主要介紹了Java數(shù)組隊(duì)列概念與用法,結(jié)合實(shí)例形式分析了Java數(shù)組隊(duì)列相關(guān)概念、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-03-03Springboot @Configuration @bean注解作用解析
這篇文章主要介紹了springboot @Configuration @bean注解作用解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02SpringBoot整合Netty服務(wù)端的實(shí)現(xiàn)示例
Netty提供了一套完整的API,用于處理網(wǎng)絡(luò)IO操作,如TCP和UDP套接字,本文主要介紹了SpringBoot整合Netty服務(wù)端的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07在java poi導(dǎo)入Excel通用工具類(lèi)示例詳解
這篇文章主要給大家介紹了關(guān)于在java poi導(dǎo)入Excel通用工具類(lèi)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09關(guān)于后端如何解決跨域的問(wèn)題說(shuō)明
這篇文章主要介紹了關(guān)于后端如何解決跨域的問(wèn)題說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08