Spring Bean的作用域典蜕,就是配置文件中的“scope”。
在面向?qū)ο蟪绦蛟O(shè)計(jì)中湿颅,一般是指對(duì)象或變量之間的可見范圍敬扛。而在Spring容器中則是指其創(chuàng)建的Bean對(duì)象相對(duì)于其他Bean對(duì)象的請(qǐng)求可見范圍。
在Spring容器中老翘,一共提供了五種作用域類型:
1芹啥、singleton:Spring IoC容器只會(huì)創(chuàng)建該Bean定義的唯一實(shí)例锻离,單例模式。在Spring IoC 容器中只會(huì)存在一個(gè)共享的Bean實(shí)例墓怀,而且所有對(duì)于Bean的請(qǐng)求汽纠,只要Id與該Bean定義相匹配,則只會(huì)返回Bean的同一省傀履。Bean以單實(shí)例方式存在虱朵。
2、prototype:原型模式钓账,每次通過容器的getBean方法獲取prototype定義的Bean時(shí)碴犬,都將產(chǎn)生一個(gè)新的Bean實(shí)例【對(duì)于有狀態(tài)的Bean,應(yīng)該使用prototype梆暮;對(duì)于無狀態(tài)的Bean服协,應(yīng)該使用singleton】
3、request:對(duì)于每次HTTP請(qǐng)求啦粹,使用request定義的Bean都將產(chǎn)生一個(gè)新實(shí)例偿荷,即每次HTTP請(qǐng)求將會(huì)產(chǎn)生不同的Bean實(shí)例。只有在Web應(yīng)用中使用Spring時(shí)唠椭,該作用域才有效跳纳。
4、session:對(duì)于每次HTTP Session贪嫂,使用session定義的Bean豆?jié){產(chǎn)生一個(gè)新實(shí)例寺庄。同樣只有在Web應(yīng)用中使用Spring時(shí),該作用域才有效力崇。
5斗塘、globalsession:每個(gè)全局的HTTP Session,使用session定義的Bean都將產(chǎn)生一個(gè)新實(shí)例餐曹。典型情況下逛拱,僅在使用portlet context的時(shí)候有效。同樣只有在Web應(yīng)用中使用Spring時(shí)台猴,該作用域才有效。
配置文件示例:
在使用第3俱两、4饱狂、5種作用域時(shí),需要在web容器中進(jìn)行一些而外的配置宪彩,因?yàn)檫@三種是與web應(yīng)用環(huán)境相關(guān)的: