詳解Spring中的@Scope注解
@Scope
Spring管理的Bean默認(rèn)是單例的
@Scope ("prototype") 通過注解可以實現(xiàn)多個實例的解決
Spring定義了多種作用域,可以基于這些作用域創(chuàng)建bean,包括:
- 單例( singleton):在整個應(yīng)用中,只創(chuàng)建bean的一個實例。也就是單例
- 原型(prototype):每次注入或者通過Spring應(yīng)用上下文獲取的時候:getBean,都會創(chuàng)建一個新的bean實例。多例,每次getBean的時候都會創(chuàng)建新的對象
- request表示請求,即在一次http請求中,被注解的Bean都是同一個Bean,不同的請求是不同的Bean;
- session表示會話,即在同一個會話中,被注解的Bean都是使用的同一個Bean,不同的會話使用不同的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的時候,都是返回的同一個對象
業(yè)務(wù)場景需要每次都獲得是新的對象
解決方案1:@Scope("prototype")注解
打印結(jié)果
當(dāng)我們從spring上下文中獲取對象的時候,返回的是不同的對象
解決方案二:Bean工廠后置處理器
我們都知道,所有的掃描的類信息都會被封裝成BeanDefine的形式,最終通過掃描的Bean定義信息來創(chuàng)建具體的對象,所以我們可以通過Bean工廠后置處理器來修改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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
微信支付java版V3驗證數(shù)據(jù)合法性(Deom)
這篇文章主要介紹了微信支付java版V3驗證數(shù)據(jù)合法性(Deom)的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-09-09Java Swing中的表格(JTable)和樹(JTree)組件使用實例
這篇文章主要介紹了Java Swing中的表格(JTable)和樹(JTree)組件使用實例,本文同時講解了表格和樹的基本概念、常用方法、代碼實例,需要的朋友可以參考下2014-10-10springboot項目部署在linux上運(yùn)行的兩種方式小結(jié)
這篇文章主要介紹了springboot項目部署在linux上運(yùn)行的兩種方式小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07SpringBoot使用thymeleaf實現(xiàn)一個前端表格方法詳解
Thymeleaf是一個現(xiàn)代的服務(wù)器端 Java 模板引擎,適用于 Web 和獨(dú)立環(huán)境。Thymeleaf 的主要目標(biāo)是為您的開發(fā)工作流程帶來優(yōu)雅的自然模板,本文就來用它實現(xiàn)一個前端表格,感興趣的可以了解一下2022-10-10安裝elasticsearch-analysis-ik中文分詞器的步驟講解
今天小編就為大家分享一篇關(guān)于安裝elasticsearch-analysis-ik中文分詞器的步驟講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-02-02Java8 LocalDateTime極簡時間日期操作小結(jié)
這篇文章主要介紹了Java8-LocalDateTime極簡時間日期操作整理,通過實例代碼給大家介紹了java8 LocalDateTime 格式化問題,需要的朋友可以參考下2020-04-04