詳解Spring中的@Scope注解
@Scope
Spring管理的Bean默認(rèn)是單例的
@Scope ("prototype") 通過(guò)注解可以實(shí)現(xiàn)多個(gè)實(shí)例的解決
Spring定義了多種作用域,可以基于這些作用域創(chuàng)建bean,包括:
- 單例( singleton):在整個(gè)應(yīng)用中,只創(chuàng)建bean的一個(gè)實(shí)例。也就是單例
- 原型(prototype):每次注入或者通過(guò)Spring應(yīng)用上下文獲取的時(shí)候:getBean,都會(huì)創(chuàng)建一個(gè)新的bean實(shí)例。多例,每次getBean的時(shí)候都會(huì)創(chuàng)建新的對(duì)象
- request表示請(qǐng)求,即在一次http請(qǐng)求中,被注解的Bean都是同一個(gè)Bean,不同的請(qǐng)求是不同的Bean;
- session表示會(huì)話(huà),即在同一個(gè)會(huì)話(huà)中,被注解的Bean都是使用的同一個(gè)Bean,不同的會(huì)話(huà)使用不同的Bean。
具體的應(yīng)用大家可以去自己試試

單例 demo
@Controller
public class TestController {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}結(jié)果
我們多次從context里面去getBean的時(shí)候,都是返回的同一個(gè)對(duì)象

業(yè)務(wù)場(chǎng)景需要每次都獲得是新的對(duì)象
解決方案1:@Scope("prototype")注解

打印結(jié)果
當(dāng)我們從spring上下文中獲取對(duì)象的時(shí)候,返回的是不同的對(duì)象

解決方案二:Bean工廠后置處理器
我們都知道,所有的掃描的類(lèi)信息都會(huì)被封裝成BeanDefine的形式,最終通過(guò)掃描的Bean定義信息來(lái)創(chuàng)建具體的對(duì)象,所以我們可以通過(guò)Bean工廠后置處理器來(lái)修改Bean定義信息達(dá)到我們目的
/**
* BeanFactoryPostProcessor bean工廠后置處理器 : 修改bean定義
*/
@Component
public class FactoryPostProcesser implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
BeanDefinitionRegistry beanDefinitionRegistry = (BeanDefinitionRegistry)configurableListableBeanFactory;
BeanDefinition testController = beanDefinitionRegistry.getBeanDefinition("testController");//拿到bean定義信息
testController.setScope("prototype");//修改bean的scope屬性
}
}Test Controller里面還是之前的代碼

打印結(jié)果:

到此這篇關(guān)于詳解Spring中的@Scope注解的文章就介紹到這了,更多相關(guān)Spring的@Scope注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java加權(quán)負(fù)載均衡策略實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Java加權(quán)負(fù)載均衡策略實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
SpringBoot如何優(yōu)雅的實(shí)現(xiàn)重試功能
這篇文章主要詳細(xì)介紹了SpringBoot如何優(yōu)雅的實(shí)現(xiàn)重試功能的步驟詳解,文中有詳細(xì)的代碼示例,具有一定的參考價(jià)值,感興趣的同學(xué)可以借鑒閱讀2023-06-06
SpringCloud實(shí)現(xiàn)服務(wù)調(diào)用feign與熔斷hystrix和網(wǎng)關(guān)gateway詳細(xì)分析
這篇文章主要介紹了SpringCloud實(shí)現(xiàn)服務(wù)調(diào)用feign與熔斷hystrix和網(wǎng)關(guān)gateway,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-04-04
獲取JPEGImageEncoder和JPEGCode這兩個(gè)類(lèi)的方法
下面小編就為大家?guī)?lái)一篇獲取JPEGImageEncoder和JPEGCode這兩個(gè)類(lèi)的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07
mybatis實(shí)體類(lèi)字段大小寫(xiě)及字段獲取不到值問(wèn)題
這篇文章主要介紹了mybatis實(shí)體類(lèi)字段大小寫(xiě)及字段獲取不到值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12

