Spring中Bean的作用域介紹

2021-10-07 18:31:38 字數 2871 閱讀 3032

在spring中,組成應用程式的主體、由springioc容器所管理的物件,被稱之為bean。簡單來講,也就是由ioc容器進行初始化、裝配、管理(生命週期和依賴關係)的物件。

spring預設作用域,singleton是單例型別,預設在建立容器時就自動建立了乙個bean的物件,這樣不管是否使用,都已經存在,並且每次獲取到的是同一物件。

當乙個bean的作用域為singleton,那麼springioc容器中只會存在乙個共享的bean例項,並且所有對bean的請求,只要id與該bean定義相匹配,則只會返回bean的同一例項。

xml中將乙個bean定義為singleton:

"user"

class

="com.ahy.pojo.user" scope=

"singleton"

>

<

/bean>

測試:

@test

void

test01()

配置類中宣告bean為singleton:

@configuration

public

class

springconfiguration

public

class

people

}}

測試:

@test

public

void

test01()

設定bean為懶載入,也就是在呼叫容器的getbean()方法時再載入:

"people"

class

="com.ahy.pojo.user.people"

lazy-init=

"true"

>

<

/bean>

prototype是原型型別,在我們建立容器的時候並沒有例項化,而是當我們獲取bean的時候才會去建立乙個物件,並且我們每次獲取到的物件都不是同乙個物件。

當乙個bean的作用域為prototype,表示乙個bean定義對應多個物件例項。prototype作用域的bean會導致在每次對該bean請求時(將其注入到另乙個bean中,或者呼叫容器的getbean()方法),都會建立乙個新的bean例項。

根據經驗,對有狀態的bean應該使用prototype作用域,而對無狀態的bean應該使用singleton作用域。

xml中將bean定義為prototype:

"people"

class

="com.ahy.pojo.user.people" scope=

"prototype"

>

<

/bean>

或者:

"people"

class

="com.ahy.pojo.user.people" singleton=

"false"

>

<

/bean>

測試:

@test

public

void

test01()

配置類中宣告bean為prototype:

@configuration

public

class

springconfiguration

public

class

people

}}

測試:

@test

public

void

test01()

xml中將bean定義為request:

"loginaction"

class

="com.ahy.loginaction" scope=

"request"

>

<

/bean>

針對每次http請求。spring容器會根據loginaction bean的定義建立乙個全新的loginaction bean例項,且該例項僅在當前http request請求內有效,因此可以根據需要放心的更改該例項的內部狀態,而其他請求中根據loginaction bean定義建立的例項,將不會看到這些特定於某個請求的狀態變化。當處理請求結束,request作用域的bean例項將被銷毀。

"userpreferences"

class

="com.ahy.userpreferences" scope=

"session"

/>

針對某個http session,spring容器會根據userpreferences bean定義建立乙個全新的userpreferences bean例項,且該userpreferences bean僅在當前http session內有效。與request作用域一樣,可以根據需要放心的更改所建立例項的內部狀態,而別的http session中根據userpreferences建立的例項,將不會看到這些特定於某個http session的狀態變化。當http session最終被廢棄的時候,在該http session作用域內的bean也會被廢棄掉。

Spring中Bean的作用域

bean作用域 作用域描述 singleton 在每個spring ioc容器中乙個bean定義對應乙個物件例項。整個容器中只有該bean的唯一例項 prototype 乙個bean定義對應多個物件例項。request session global session 因為這樣在配置中的任何錯誤就會即刻...

spring中bean的作用域

如何使用spring的作用域 這裡的scope就是用來配置spring bean的作用域,它標識bean的作用域。在spring2.0之前bean只有2種作用域即 singleton 單例 non singleton 也稱prototype spring2.0以後,增加了session reques...

Spring中bean的作用域

1 singleton作用域 當乙個bean的作用域設定為singleton,spring ioc容器只會建立該bean定義的唯一例項。2 prototype prototype作用域部署的bean,每一次請求都會產生乙個新的bean例項,相當與乙個new的操作。3 request request表...