欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Spring中的@Scope注解

 更新時間:2023年07月21日 10:35:34   作者:小星向上  
這篇文章主要介紹了詳解Spring中的@Scope注解,@Scope注解是Spring IOC容器中的一個作用域,在Spring IOC容器中,他用來配置Bean實例的作用域?qū)ο?需要的朋友可以參考下

@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)文章

最新評論