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

Spring中@Scope的幾種取值方式

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

@Scope的幾種取值

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

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

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

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

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

Spring入門詳解scope屬性

一、scope屬性

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

二、scope分類

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

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

在Spring 2.0之后,為支持web應用的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);
//        當 scope="singleton"
        /**輸出結(jié)果地址一致(哈希值)
          *無參構(gòu)造函數(shù)被使用
         * entity.Student@78186a70
         * entity.Student@78186a70
         */
    }
}

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

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

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

接著我們再看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);
//     當   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,在每個人領取蘋果的時候,我們都是發(fā)一個新的蘋果給他,發(fā)完之后,別人愛怎么吃就怎么吃,愛什么時候吃什么時候吃,但是注意吃完要把蘋果核扔到垃圾箱!對于那些不能共享使用的對象類型,應該將其定義的scope設為prototype。”

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

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

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

相關文章

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

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

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

    SpringBoot中進行事務回滾的方法

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

    SpringBoot整合Lombok及常見問題解決

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

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

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

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

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

    Java中對象快速復制的幾種方式詳解

    這篇文章主要介紹了Java中對象快速復制的幾種方式詳解,對象的克隆是指創(chuàng)建一個新的對象,且新的對象的狀態(tài)與原始對象的狀態(tài)相同,當對克隆的新對象進行修改時,不會影響原始對象的狀態(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),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • java實現(xiàn)訂餐系統(tǒng)

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

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

最新評論

库尔勒市| 辰溪县| 光山县| 胶南市| 潼南县| 措勤县| 大城县| 武安市| 页游| 繁峙县| 延边| 汝阳县| 都昌县| 如皋市| 临夏市| 万源市| 孝昌县| 慈溪市| 汽车| 咸宁市| 房产| 铅山县| 静海县| 大丰市| 肇庆市| 闵行区| 聂荣县| 青州市| 清涧县| 土默特左旗| 光泽县| 隆德县| 福建省| 兰坪| 天门市| 锦州市| 长泰县| 嘉黎县| 社会| 澳门| 崇信县|