@Scope簡單點說就是用來指定bean的作用域
官方解釋是:scope用來聲明IOC容器中的對象應該處的限定場景或者說該對象的存活空間,即在IOC容器在對象進入相應的scope之前,生成並裝配這些對象,在該對象不再處於這些scope的限定之后,容器通常會銷毀這些對象
默認是單例模式,即singleton:Spring IOC容器中只會存在一個共享的bean實例,並且所有對bean的請求,只要id與該bean定義相匹配,則只會返回bean的同一實例,一個容器對應一個bean。
prototype 表示多例:每一次請求(將其注入到另一個bean中,或者以程序的方式調用容器的 getBean()方法)都會產生一個新的bean實例,相當與一個new的操作
request 表示該針對每一次HTTP請求都會產生一個新的bean,同時該bean僅在當前HTTP request內有效
session 表示作用域表示該針對每一次HTTP請求都會產生一個新的bean,同時該bean僅在當前HTTP session內有效
global session 作用域類似於標准的HTTP Session作用域,不過它僅僅在基於portlet的web應用中才有意義。Portlet規范定義了全局Session的概念,它被所有構成某個 portlet web應用的各種不同的portlet所共享。在global session作用域中定義的bean被限定於全局portlet Session的生命周期范圍內。如果你在web中使用global session作用域來標識bean,那么web會自動當成session類型來使用
在request、session、global session使用的時候首先要在初始化web的web.xml中做如下配置
如果使用的是Servlet 2.4及以上的web容器,那么僅需要在web.xml中增加下述ContextListener即可
<web-app> ... <listener> <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> </listener> ... </web-app>
如果是Servlet2.4以前的web容器,需要使用一個javax.servlet.Filter的實現
<web-app> .. <filter> <filter-name>requestContextFilter</filter-name> <filter-class>org.springframework.web.filter.RequestContextFilter</filter-class> </filter> <filter-mapping> <filter-name>requestContextFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ... </web-app>