詳解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ì)話,即在同一個(gè)會(huì)話中,被注解的Bean都是使用的同一個(gè)Bean,不同的會(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工廠后置處理器
我們都知道,所有的掃描的類信息都會(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)文章
Springboot集成定時(shí)器和多線程異步處理操作
這篇文章主要介紹了Springboot集成定時(shí)器和多線程異步處理操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09微信支付java版V3驗(yàn)證數(shù)據(jù)合法性(Deom)
這篇文章主要介紹了微信支付java版V3驗(yàn)證數(shù)據(jù)合法性(Deom)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09Java Swing中的表格(JTable)和樹(shù)(JTree)組件使用實(shí)例
這篇文章主要介紹了Java Swing中的表格(JTable)和樹(shù)(JTree)組件使用實(shí)例,本文同時(shí)講解了表格和樹(shù)的基本概念、常用方法、代碼實(shí)例,需要的朋友可以參考下2014-10-10springboot項(xiàng)目部署在linux上運(yùn)行的兩種方式小結(jié)
這篇文章主要介紹了springboot項(xiàng)目部署在linux上運(yùn)行的兩種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07Java?中的?clone(?)?和?new哪個(gè)效率更高
很多朋友不太清楚clone()和new那個(gè)更快?針對(duì)這個(gè)問(wèn)題我百度了好多資料,最終小編總結(jié)下關(guān)于Java?中的?clone(?)?和?new哪個(gè)效率更高的問(wèn)題,感興趣的朋友跟隨小編一起看看吧2021-12-12SpringBoot使用thymeleaf實(shí)現(xiàn)一個(gè)前端表格方法詳解
Thymeleaf是一個(gè)現(xiàn)代的服務(wù)器端 Java 模板引擎,適用于 Web 和獨(dú)立環(huán)境。Thymeleaf 的主要目標(biāo)是為您的開(kāi)發(fā)工作流程帶來(lái)優(yōu)雅的自然模板,本文就來(lái)用它實(shí)現(xiàn)一個(gè)前端表格,感興趣的可以了解一下2022-10-10安裝elasticsearch-analysis-ik中文分詞器的步驟講解
今天小編就為大家分享一篇關(guān)于安裝elasticsearch-analysis-ik中文分詞器的步驟講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02springmvc與mybatis集成配置實(shí)例詳解
這篇文章主要介紹了springmvc與mybatis集成配置實(shí)例詳解的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09Java8 LocalDateTime極簡(jiǎn)時(shí)間日期操作小結(jié)
這篇文章主要介紹了Java8-LocalDateTime極簡(jiǎn)時(shí)間日期操作整理,通過(guò)實(shí)例代碼給大家介紹了java8 LocalDateTime 格式化問(wèn)題,需要的朋友可以參考下2020-04-04