Spring Bean六種作用域的適用場(chǎng)景和使用方式
主要對(duì)單例作用域與原型作用域進(jìn)行重點(diǎn)說(shuō)明,其余四個(gè)了解即可
單例(Singleton)作用域:
單例作用域一般是默認(rèn)的Bean作用域。Spring容器在第一次獲取Bean時(shí)創(chuàng)建實(shí)例,并在后續(xù)請(qǐng)求中返回同一個(gè)實(shí)例。
例如:我們現(xiàn)在創(chuàng)建一個(gè)公共的Bean供用戶一與用戶二使用,用戶一再使用完后對(duì)其內(nèi)容進(jìn)行修改,后被用戶二使用,查看Bean是否改變,即可查看Bean的作用域。
公共的Bean:
@Component
public class Users {
private User user;
@Bean
public User user1(){
user= new User(1);
user.setName("zcx");
return user;
}
}用戶一使用時(shí)進(jìn)行修改操作:
@Controller
public class BeanScopesController {
@Autowired
private User user;
public User getUser(){
User user1 = user;
System.out.println(user1.toString()+"這是修改之前的");
user1.setName("java");
return user1;
}
}用戶二再去使用Bean:
@Controller
public class BeanScopesController2 {
@Autowired
private User user2;
public User getUser2(){
User user = user2;
return user;
}
}打印用戶一與用戶二共用Bean的值:
public class demo {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
BeanScopesController beanScopesController = context.getBean(BeanScopesController.class);
System.out.println(beanScopesController.getUser().toString()+"這是第一個(gè)調(diào)用對(duì)象修改之后的");
BeanScopesController2 beanScopesController2 = context.getBean(BeanScopesController2.class);
System.out.println(beanScopesController2.getUser2().toString()+"這是第二個(gè)對(duì)象調(diào)用之后的");
}
}進(jìn)行結(jié)果打?。?/p>

通過(guò)結(jié)果我們發(fā)現(xiàn)用戶一修改過(guò)的值在用戶二中也出現(xiàn)了,已經(jīng)不是初始的值了。所以說(shuō)明Bean 默認(rèn)情況下是單例狀態(tài)(singleton),也就是所有用戶的使?的都是同?個(gè)對(duì)象。
原型(Prototype)作用域:
每次對(duì)該作?域下的Bean的請(qǐng)求都會(huì)創(chuàng)建新的實(shí)例:獲取Bean(即通過(guò)applicationContext.getBean等?法獲取)及裝配Bean(即通過(guò)@Autowired注?)都是新的對(duì)象實(shí)例
可以使? @Scope 標(biāo)簽?來(lái)修改Bean 的作?域,例如:
@Component
public class Users {
private User user;
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Bean
public User user1(){
user= new User(1);
user.setName("zcx");
return user;
}
}通過(guò)跟前面一樣的代碼打印結(jié)果如下:

通過(guò)結(jié)果我們知道Bean的作用域已經(jīng)由單例模式修改為原型模式也就是多例模式當(dāng)然@Scope 標(biāo)簽有兩種設(shè)置?式:
- 直接設(shè)置值:@Scope(“prototype”)
- 使用枚舉設(shè)置:@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) 請(qǐng)求(Request)作用域:
每次http請(qǐng)求會(huì)創(chuàng)建新的Bean實(shí)例,類(lèi)似于prototype,?次http的請(qǐng)求和響應(yīng)的共享Bean,限定SpringMVC中使用
會(huì)話(Session)作用域:
在?個(gè)http session中,定義?個(gè)Bean實(shí)例,?戶回話的共享Bean,限定SpringMVC中使?
全局(application)作用域:
在?個(gè)http servlet Context中,定義?個(gè)Bean實(shí)例,使用于Web應(yīng)?的上下?信息,限定SpringMVC中使?
HTTP WebSocket 作用域
在?個(gè)HTTP WebSocket的?命周期中,定義?個(gè)Bean實(shí)例,WebSocket的每次會(huì)話中,保存了?個(gè)Map結(jié)構(gòu)的頭信息,將?來(lái)包裹客戶端消息頭。第?次初始化后,直到WebSocket結(jié)束都是同?個(gè)Bean,限定Spring WebSocket中使?
到此這篇關(guān)于Spring Bean六種作用域的適用場(chǎng)景和使用方式的文章就介紹到這了,更多相關(guān)Spring Bean 作用域內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用 Spring Boot 內(nèi)嵌容器 Undertow創(chuàng)建服務(wù)器的方法
Undertow是一個(gè)非常輕量并高性能的web server,它來(lái)自 JBoss。支持blocking和non-blocking兩種NIO API。接下來(lái)通過(guò)本文給大家介紹使用Spring Boot 內(nèi)嵌容器 Undertow創(chuàng)建服務(wù)器的方法,感興趣的朋友一起看看吧2017-11-11
Java程序中添加播放MIDI音樂(lè)功能的實(shí)現(xiàn)方法詳解
本篇文章是對(duì)在Java程序中添加播放MIDI音樂(lè)功能的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
Java基礎(chǔ)知識(shí)精通塊作用域與條件及switch語(yǔ)句
塊(block,即復(fù)合語(yǔ)句)是指由若干條 Java 語(yǔ)句組成的語(yǔ)句,并由一對(duì)大括號(hào)括起來(lái)。塊確定了變量的作用域。一個(gè)塊可以嵌套在另一個(gè)塊中;條件語(yǔ)句、switch語(yǔ)句是我們常見(jiàn)會(huì)用到的結(jié)構(gòu),感興趣的朋友來(lái)看看吧2022-04-04
Spring Boot2中如何優(yōu)雅地個(gè)性化定制Jackson實(shí)現(xiàn)示例
這篇文章主要為大家介紹了Spring Boot2中如何優(yōu)雅地個(gè)性化定制Jackson實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
macbook中springboot的jmeter壓測(cè)示例
這篇文章主要介紹了macbook中springboot的jmeter壓測(cè)示例詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-11-11
2020新版idea創(chuàng)建項(xiàng)目沒(méi)有javaEE 沒(méi)有Web選項(xiàng)的完美解決方法
這篇文章主要介紹了2020新版idea創(chuàng)建項(xiàng)目沒(méi)有javaEE 沒(méi)有Web選項(xiàng)的完美解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
詳解Spring中InitializingBean接口的功能
這篇文章主要介紹了Spring中InitializingBean接口的功能,講述了spring中InitializingBean接口的功能簡(jiǎn)介說(shuō)明,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05

