spring 的 scope大概有五種形式,分別是:
1.singleton:在spring ioc容器中僅存在乙個bean例項,bean以單例項形式存在。singleton是spring的預設配置。
3.request:web專案中,給每乙個http request新建乙個bean。
4.session:web專案中,給每乙個http session新建乙個bean。
5.globalsession:同乙個全域性session共享乙個bean,一般用於portlet應用環境。
今天主要說的是前兩種,singleton和prototype,即單例模式和多例模式。
singleton:
singleton的bean在同乙個spring ioc容器中只存在乙個例項。
這個例子是在《精通spring 4.x》上看到的,覺得很形象
//1
//2//3
//4
我們在1處把car宣告為singleton例項,這個地方也可不寫,因為spring的預設狀態就是singleton模式,然後我們宣告了三個bean,2,3,4。這三個ben的car屬性都是指向同乙個bean(car)的,如圖:
剛才提到了,spring在啟動的時候便會初始化這些singleton型別的bean,但是並不是每個使用者都希望這樣,所有spring提供了延遲載入控制:
id但是這個設定不是絕對的,如果這個bean被提前例項化的bean引用了,那麼spring就會忽略這個設定。="boss2"
class
="com.smart.scope.boss"
p: car-ref
="car"
lazy-init
="">
prototype:
同樣的例子,
//1
//2//3
//4
在這個配置裡面把car定義成prototype,所有每乙個boss在呼叫getbean(car.class)的時候都會得到乙個新的car例項,如圖:
spring ioc容器在啟動時不會例項化prototype的bean,當spring ioc把prototype的bean交給呼叫者以後,就不在關心它的生命週期了。
看乙個簡單的例子:
1.編寫singleton的bean
@service
public class demosingletonservice
2.編寫prototype的bean
@service
@scope("prototype")
public class demoprototypeservice
3.配置類
@configuration
@componentscan("com.example.ch2.scope")
public class scopeconfig
4.執行主函式類
public class main
}
看一下輸出結果:
參考《精通spring 4》《springboot 實戰》
Spring Bean的作用域
bean的作用域,常用的有兩種,單例singleton 多例prototype 預設情況下,bean都是單例的singleton。在容器初始化的時候就被建立,就這麼乙份。1 單例模式 例如 測試 package com.lynn.spring.test import static org.junit...
Spring bean的作用域
spring框架中,bean 的作用域有如下五種 1.單例 每個spring的ioc容器返回來乙個bean例項 框架預設 2.原型 當每次請求時候都返回來乙個bean例項 3.請求 每個http請求返回來乙個bean例項 4.會話 每個http會話返回來乙個bean例項 5.全域性會話 返回全域性會...
Spring Bean的作用域
在xml檔案中配置bean時,我們可以通過scope為bean配置指定的作用域。bean的作用域分為五種 說明 singleton 單例模式,乙個bean容器中只存在乙個bean例項 prototype 原型模式,每次請求都會產生乙個新的bean例項 request 每次http請求會產生乙個新的b...