前言
在JavaSE中,我們學(xué)習(xí)過了全局變量以及局部變量,這里就涉及到了作用域問題,那么什么是作用域呢?
限定程序中變量的使用范圍叫做作用域,或者說在源代碼中定義變量的某個(gè)區(qū)域就叫做作用域。
而Bean的作用域指的是Bean在Spring整個(gè)框架中的某種行為模式,比如singleton單域作用域,就表示Bean在整個(gè)SPring框架中只有一份,它是全局共享的,如果這個(gè)值在一個(gè)地方被修改了,那么在另一個(gè)地方讀取時(shí),就是被修改的值。
接下來,讓我們一起來看一看Bean的六種作用域,每種作用域的效果以及每個(gè)作用域的使用場(chǎng)景。
一、singleton(單例作用域)
在該作用域下,Bean在IoC容器中只存在著一個(gè)實(shí)例,無論是獲取Bean(即通過applicationContext.getBean等方法獲?。┻€是裝配Bean(即通過@Autowired注入)都是同一個(gè)對(duì)象。
通常情況下,無狀態(tài)的Bean使用該作用域,無狀態(tài)指的是Bean對(duì)象的屬性狀態(tài)不需要更新。
在Spring框架中,默認(rèn)使用該作用域。
二、prototype(原型作用域、多例作用域)
在該作用域下,每次對(duì)Bean的請(qǐng)求都會(huì)創(chuàng)建一個(gè)新的實(shí)例,無論是獲取Bean還是裝配Bean,都將是新的實(shí)例對(duì)象。
通常情況下有狀態(tài)的Bean使用該作用域。
三、request(請(qǐng)求作用域)
請(qǐng)求作用域,顧名思義,每次http請(qǐng)求都會(huì)創(chuàng)建新的Bean實(shí)例,類似于prototype。
這個(gè)作用域使用于一次http的請(qǐng)求和響應(yīng)中,同時(shí),是請(qǐng)求和響應(yīng)所共享的Bean。
這個(gè)作用域限定在SpringMVC框架中使用。
四、session(會(huì)話作用域)
這個(gè)作用域描述的是在一個(gè)http session中,定義一個(gè)Bean實(shí)例。
可用于用戶會(huì)話的共享Bean,比如:記錄一個(gè)用戶的登錄信息。
這個(gè)作用域也是限定在SpringMVC框架中使用。
五、application(全局作用域)
這個(gè)作用域描述的是在一個(gè)http servlet Context中,定義一個(gè)Bean實(shí)例。
可用于Web應(yīng)用的上下文信息,比如:記錄一個(gè)應(yīng)用的共享信息。
這個(gè)作用域也是限定在SpringMVC框架中使用。
六、websocket(HTTP WebSocket作用域)
這個(gè)作用域描述的是在一個(gè)HTTP WebSocket的生命周期中,定義一個(gè)Bean實(shí)例。
WebSocket的每次會(huì)話中,保存了一個(gè)Map結(jié)構(gòu)的頭信息,將用來包裹客戶端消息頭。第一次初始化之后,直到WebSocket結(jié)束都是同一個(gè)Bean.
這個(gè)作用域也是限定在SpringMVC框架中使用。
總結(jié)
在普通的Spring項(xiàng)目中,只有前兩種作用域,后四種狀態(tài)的作用域是
SpringMVC中使用的。文章來源:http://www.zghlxwxcb.cn/news/detail-480538.html
除此之外,singleton(單例作用域)和application(全局作用域)看似都是差不多的,那么它們到底有什么區(qū)別呢?文章來源地址http://www.zghlxwxcb.cn/news/detail-480538.html
- singleton是Spring Core的作用域;application是Spring Web中的作用域。
- singleton作用于IoC容器,而application作用于Servlet容器。
到了這里,關(guān)于關(guān)于Bean的六種作用域的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!