在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表...