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


序言

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

在創建bean的時候可以帶上scope屬性,scope有下面幾種類型:

概念理解

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

singleton:

這是Spring默認的scope,表示Spring容器只創建唯一一個bean的實例,所有該對象的引用都共享這個實例,並且Spring在創建第一次后,會在Spring的IoC容器中緩存起來,之后不再創建,就是設計模式中的單例模式的形式。

並且對該bean的所有后續請求和引用都將返回該緩存中的對象實例。一般情況下,無狀態的bean使用該scope。

prototype:

代表線程每次調用或請求這個bean都會創建一個新的實例。一般情況下,有狀態的bean使用該scope。

request:

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

session:

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

global session:

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

但是,這個scope只在porlet的web應用程序中才有意義,它映射到porlet的global范圍的session,如果普通的web應用使用了這個scope,容器會把它作為普通的session作用域的scope創建。

注: 再次說明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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM