最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring中@Scope的幾種取值方式

 更新時間:2022年06月15日 09:27:00   作者:to.to  
這篇文章主要介紹了Spring中@Scope的幾種取值方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

@Scope的幾種取值

1、singleton:一個Spring容器中只有一個Bean的實例,此為Spring的默認(rèn)配置,全容器共享一個實例

2、prototype:每次調(diào)用新建一個Bean的實例

3、Request:Web項目中,給每一個http request新建一個Bean實例

4、Session:Web項目中,給每一個http session新建一個Bean實例。

5、GlobalSession:這個只在portal應(yīng)用中有用,給每一個global http session新建一個Bean實例。

Spring入門詳解scope屬性

一、scope屬性

spring中scope是一個非常關(guān)鍵的概念,簡單說就是對象在spring容器(IOC容器)中的生命周期,也可以理解為對象在spring容器中的創(chuàng)建方式。

二、scope分類

目前,scope的取值有5種取值:

在Spring 2.0之前,有singleton和prototype兩種;

在Spring 2.0之后,為支持web應(yīng)用的ApplicationContext,增強另外三種:request,session和global session類型,它們只實用于web程序,通常是和XmlWebApplicationContext共同使用。

三、scope取值

1.singleton

此取值時表明容器中創(chuàng)建時只存在一個實例,所有引用此bean都是單一實例。用代碼實例

代碼如下(示例):

Student類 

package entity;
public class Student {
    private int studentNo;
    private String studentName;
    public Student() {
        System.out.println("無參構(gòu)造函數(shù)被使用");
    }
    public int getStudentNo() {
        return studentNo;
    }
    public void setStudentNo(int studentNo) {
        this.studentNo = studentNo;
    }
    public String getStudentName() {
        return studentName;
    }
    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }
//    @Override
//    public String toString() {
//        return "Student{" +
//                "studentNo=" + studentNo +
//                ", studentName='" + studentName + '\'' +
//                '}';
//    }
}

測試代碼

package test;
import entity.Student;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringTest {
    @Test
//    測試scope屬性,scope="singleton"
    public void test1(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        Student student1= (Student) context.getBean("student");
        Student student2= (Student) context.getBean("student");
//        測試student1,h和student2d的地址是否一致
        System.out.println(student1);
        System.out.println(student2);
//        當(dāng) scope="singleton"
        /**輸出結(jié)果地址一致(哈希值)
          *無參構(gòu)造函數(shù)被使用
         * entity.Student@78186a70
         * entity.Student@78186a70
         */
    }
}

在輸出的結(jié)果中我們可以看出,當(dāng)設(shè)置為singleton時,加載的兩個Student的哈希值一致,同時無參構(gòu)造函數(shù)被調(diào)用一次,如果通過斷點測試可以發(fā)現(xiàn)在加載文件時,無參構(gòu)造函數(shù)就已經(jīng)被調(diào)用(如下圖)

總結(jié):Bean的實例化的個數(shù):1個

  • bean的實例化時機:當(dāng)spring核心文件被加載是,實例化配置的bean實例。
  • 對象運行;只要容器在對象就一直活著
  • 對象銷毀:當(dāng)應(yīng)用卸載或者銷毀容器時,對象被銷毀

接著我們再看prototype

2.prototype

代碼如下(示例):

package test;
import entity.Student;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringTest {
    @Test
//    測試scope屬性,scope="singleton"
    public void test1(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        Student student1= (Student) context.getBean("student");
        Student student2= (Student) context.getBean("student");
//        測試student1,h和student2d的地址是否一致
        System.out.println(student1);
        System.out.println(student2);
//     當(dāng)   scope="prototype"
        /**
         * 輸出結(jié)果
         * 無參構(gòu)造函數(shù)被使用
         * 無參構(gòu)造函數(shù)被使用
         * entity.Student@67b467e9
         * entity.Student@47db50c5
         *
         */
    }
}

首先在測試結(jié)果中,我們可以看出,兩個Student的哈希值不一致,而且無參構(gòu)造函數(shù)被執(zhí)行了兩次,接著我們在用斷點測試一下

從測試的結(jié)果來看,此時的無參構(gòu)造函數(shù)是在實例化Student的時候被調(diào)用的。我看到過一個大佬舉的一個例子,我來引用一下 “如同分蘋果,將蘋果的bean的scope屬性聲明為prototype,在每個人領(lǐng)取蘋果的時候,我們都是發(fā)一個新的蘋果給他,發(fā)完之后,別人愛怎么吃就怎么吃,愛什么時候吃什么時候吃,但是注意吃完要把蘋果核扔到垃圾箱!對于那些不能共享使用的對象類型,應(yīng)該將其定義的scope設(shè)為prototype。”

總結(jié):Bean的實例化的個數(shù):多個

  • bean的實例化時機:當(dāng)spring核心文件被加載是,實例化配置的bean實例。
  • 對象運行;只對象在就一直活著
  • 對象銷毀:當(dāng)對象長時間不用時,被java的垃圾回收了

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java鏈表中元素刪除的實現(xiàn)方法詳解【只刪除一個元素情況】

    Java鏈表中元素刪除的實現(xiàn)方法詳解【只刪除一個元素情況】

    這篇文章主要介紹了Java鏈表中元素刪除的實現(xiàn)方法,結(jié)合實例形式分析了java只刪除鏈表中一個元素的相關(guān)操作原理、實現(xiàn)方法與注意事項,需要的朋友可以參考下
    2020-03-03
  • SpringBoot中進行事務(wù)回滾的方法

    SpringBoot中進行事務(wù)回滾的方法

    在Spring Boot中,可以使用TransactionTemplate或@Transactional注解來進行事務(wù)管理,本文主要介紹了SpringBoot中進行事務(wù)回滾的方法,感興趣的可以了解一下
    2023-11-11
  • SpringBoot整合Lombok及常見問題解決

    SpringBoot整合Lombok及常見問題解決

    本文主要介紹了SpringBoot整合Lombok及常見問題解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 基于Java實現(xiàn)簡易的局域網(wǎng)對話系統(tǒng)

    基于Java實現(xiàn)簡易的局域網(wǎng)對話系統(tǒng)

    這篇文章主要介紹了基于Java實現(xiàn)的簡易的局域網(wǎng)對話系統(tǒng),文中的示例代碼對我們學(xué)習(xí)Java有一定的幫助,感興趣的小伙伴快來跟隨小編一起學(xué)習(xí)一下吧
    2021-12-12
  • Java如何發(fā)起http請求的實現(xiàn)(GET/POST)

    Java如何發(fā)起http請求的實現(xiàn)(GET/POST)

    這篇文章主要介紹了Java如何發(fā)起http請求的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Java中對象快速復(fù)制的幾種方式詳解

    Java中對象快速復(fù)制的幾種方式詳解

    這篇文章主要介紹了Java中對象快速復(fù)制的幾種方式詳解,對象的克隆是指創(chuàng)建一個新的對象,且新的對象的狀態(tài)與原始對象的狀態(tài)相同,當(dāng)對克隆的新對象進行修改時,不會影響原始對象的狀態(tài),需要的朋友可以參考下
    2023-08-08
  • Spring Boot 3.4.0 結(jié)合 Mybatis-plus 實現(xiàn)動態(tài)數(shù)據(jù)源的完整方案

    Spring Boot 3.4.0 結(jié)合 Mybatis-plus 實

    本文詳細介紹了在 Spring Boot 3.4.0 項目中結(jié)合 Mybatis-plus 實現(xiàn)動態(tài)數(shù)據(jù)源切換的完整方案,通過自定義注解和AOP切面,我們可以優(yōu)雅地實現(xiàn)方法級別的數(shù)據(jù)源切換,滿足多數(shù)據(jù)源場景下的各種需求,感興趣的朋友一起看看吧
    2025-04-04
  • Spring Bean生命周期之Bean元信息的配置與解析階段詳解

    Spring Bean生命周期之Bean元信息的配置與解析階段詳解

    這篇文章主要為大家詳細介紹了Spring Bean生命周期之Bean元信息的配置與解析階段,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 一篇文章帶你使用SpringBoot基于WebSocket的在線群聊實現(xiàn)

    一篇文章帶你使用SpringBoot基于WebSocket的在線群聊實現(xiàn)

    這篇文章主要介紹了一篇文章帶你使用SpringBoot基于WebSocket的在線群聊實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • java實現(xiàn)訂餐系統(tǒng)

    java實現(xiàn)訂餐系統(tǒng)

    這篇文章主要為大家詳細介紹了java實現(xiàn)訂餐系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07

最新評論

德钦县| 陆丰市| 游戏| 铁岭县| 墨江| 集贤县| 苍南县| 遵义市| 华池县| 汉沽区| 红河县| 开远市| 公主岭市| 沂源县| 怀仁县| 宜章县| 襄城县| 云和县| 中西区| 阳泉市| 兴宁市| 鄂尔多斯市| 和田市| 潮安县| 正蓝旗| 辛集市| 玛纳斯县| 若尔盖县| 北碚区| 苏尼特左旗| 固阳县| 昂仁县| 永定县| 平利县| 嘉定区| 靖州| 高邮市| 潼南县| 榆树市| 黑龙江省| 青神县|