spring中的scope詳解

小云
114
2023-09-23 06:02:34

在Spring中,scope是指定bean的生命周期和可見性的一種機(jī)制。Spring提供了多種scope選項(xiàng),可以根據(jù)應(yīng)用程序的需求選擇合適的scope。下面是幾種常見的scope選項(xiàng)及其詳解:

  1. Singleton(默認(rèn)):這是Spring的默認(rèn)scope,表示一個(gè)bean在整個(gè)應(yīng)用程序中只有一個(gè)實(shí)例。無(wú)論在哪里注入該bean,都將得到同一個(gè)實(shí)例。可以通過(guò)在bean的定義中使用<bean>scope屬性指定為singleton來(lái)顯式地設(shè)置該scope。

  2. Prototype:表示每次請(qǐng)求或注入時(shí)都會(huì)創(chuàng)建一個(gè)新的實(shí)例。每次獲取該bean時(shí),Spring都會(huì)創(chuàng)建一個(gè)新的對(duì)象??梢酝ㄟ^(guò)在bean的定義中使用<bean>scope屬性指定為prototype來(lái)顯式地設(shè)置該scope。

  3. Request:表示一個(gè)bean的生命周期將與HTTP請(qǐng)求的生命周期相同。每個(gè)HTTP請(qǐng)求都會(huì)創(chuàng)建一個(gè)新的實(shí)例,并且在請(qǐng)求結(jié)束后銷毀。通常用于Web應(yīng)用程序中處理每個(gè)請(qǐng)求的控制器bean。

  4. Session:表示一個(gè)bean的生命周期將與用戶會(huì)話的生命周期相同。每個(gè)用戶會(huì)話都會(huì)創(chuàng)建一個(gè)新的實(shí)例,并且在會(huì)話結(jié)束后銷毀。通常用于Web應(yīng)用程序中管理每個(gè)用戶狀態(tài)的bean。

  5. Global Session:類似于Session scope,但是適用于基于portlet的Web應(yīng)用程序。一個(gè)全局會(huì)話代表了多個(gè)portlet之間的會(huì)話。

除了上述選項(xiàng)之外,Spring還提供了其他一些scope選項(xiàng),如Application(與ServletContext的生命周期相同)、WebSocket(與WebSocket會(huì)話的生命周期相同)、Custom(自定義scope)等。可以根據(jù)具體的應(yīng)用場(chǎng)景選擇合適的scope。

需要注意的是,scope只對(duì)bean定義有效。如果在一個(gè)singleton作用域的bean中注入了一個(gè)prototype作用域的bean,那么該prototype作用域的bean將在應(yīng)用程序啟動(dòng)時(shí)創(chuàng)建,但在整個(gè)應(yīng)用程序中只有一個(gè)實(shí)例。如果需要在singleton作用域的bean中注入多個(gè)不同實(shí)例的bean,可以使用ObjectFactoryProvider類型的注入。

0