Spring學習(二):Spring支持的5種Bean Scope

序言

Scope是定義Spring如何建立bean的實例的。Spring容器最初提供了兩種bean的scope類型:singleton和prototype,但發佈2.0之後,又引入了另外三種scope類型:request、session和global session,這三種只能在web 應用中才可使用。html

在建立bean的時候能夠帶上scope屬性,scope有下面幾種類型:web

概念理解

Spring官方文檔表示有以下5種類型:spring

singleton:

這是Spring默認的scope,表示Spring容器只建立惟一一個bean的實例,全部該對象的引用都共享這個實例,而且Spring在建立第一次後,會在Spring的IoC容器中緩存起來,以後再也不建立,就是設計模式中的單例模式的形式。設計模式

而且對該bean的全部後續請求和引用都將返回該緩存中的對象實例。通常狀況下,無狀態的bean使用該scope。緩存

prototype:

表明線程每次調用或請求這個bean都會建立一個新的實例。通常狀況下,有狀態的bean使用該scope。session

request:

每次http請求將會有各自的bean實例,相似於prototype。
也就是說每一個request做用域內的請求只建立一個實例。prototype

session:

在一個http session中,一個bean定義對應一個bean實例。也就是說每一個session做用域內的請求只建立一個實例。線程

global session:

在一個全局的http session中,一個bean定義對應一個bean實例。設計

可是,這個scope只在porlet的web應用程序中才有意義,它映射到porlet的global範圍的session,若是普通的web應用使用了這個scope,容器會把它做爲普通的session做用域的scope建立。code

注: 再次說明spring的默認scope(bean做用域)是singleton

使用方式

建立bean的時候如何指定其做用域呢?

XML方式:

< bean  id = 「accountService」  class = 「com.foo.DefaultAccountService」  scope = 「prototype」 />

註解方式:

@Component
@Scope("prototype")
public class User{
    …………
}

參考書籍:

Spring官網:https://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch04s04.html

相關文章
相關標籤/搜索