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

Spring中@Scope的幾種取值方式

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

@Scope的幾種取值

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

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

3、Request:Web項(xiàng)目中,給每一個http request新建一個Bean實(shí)例

4、Session:Web項(xiàng)目中,給每一個http session新建一個Bean實(shí)例。

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

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,增強(qiáng)另外三種:request,session和global session類型,它們只實(shí)用于web程序,通常是和XmlWebApplicationContext共同使用。

三、scope取值

1.singleton

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

代碼如下(示例):

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)用一次,如果通過斷點(diǎn)測試可以發(fā)現(xiàn)在加載文件時,無參構(gòu)造函數(shù)就已經(jīng)被調(diào)用(如下圖)

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

  • bean的實(shí)例化時機(jī):當(dāng)spring核心文件被加載是,實(shí)例化配置的bean實(shí)例。
  • 對象運(yùn)行;只要容器在對象就一直活著
  • 對象銷毀:當(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í)行了兩次,接著我們在用斷點(diǎn)測試一下

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

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

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

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

相關(guān)文章

  • Java中的可變參數(shù)常見用法實(shí)例總結(jié)

    Java中的可變參數(shù)常見用法實(shí)例總結(jié)

    這篇文章主要介紹了Java中的可變參數(shù)常見用法,結(jié)合實(shí)例形式總結(jié)分析了java可變參數(shù)的常見功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-10-10
  • Jasypt的StandardPBEByteEncryptor使用源碼解析

    Jasypt的StandardPBEByteEncryptor使用源碼解析

    這篇文章主要介紹了Jasypt的StandardPBEByteEncryptor使用源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Java 生成隨機(jī)單據(jù)號的實(shí)現(xiàn)示例

    Java 生成隨機(jī)單據(jù)號的實(shí)現(xiàn)示例

    本文主要介紹了Java 生成隨機(jī)單據(jù)號的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • SpringBoot 2.x 整合Lombok的方法示例

    SpringBoot 2.x 整合Lombok的方法示例

    Spring Boot是非常高效的開發(fā)框架,lombok是一套代碼模板解決方案,將極大提升開發(fā)的效率,這篇文章主要介紹了SpringBoot 2.x 整合Lombok的方法示例,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Java單鏈表反轉(zhuǎn)圖文教程

    Java單鏈表反轉(zhuǎn)圖文教程

    這篇文章主要給大家介紹了關(guān)于Java單鏈表反轉(zhuǎn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java中位運(yùn)算(移位、位與、或、異或、非) 的簡單實(shí)例

    Java中位運(yùn)算(移位、位與、或、異或、非) 的簡單實(shí)例

    Java中位運(yùn)算(移位、位與、或、異或、非) 的簡單實(shí)例,需要的朋友可以參考一下
    2013-02-02
  • jdk-logging?log4j?logback日志系統(tǒng)實(shí)現(xiàn)機(jī)制原理介紹

    jdk-logging?log4j?logback日志系統(tǒng)實(shí)現(xiàn)機(jī)制原理介紹

    這篇文章主要介紹了jdk-logging、log4j、logback日志介紹以及三個日志系統(tǒng)的實(shí)現(xiàn)機(jī)制,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • 手工搭建Servlet實(shí)現(xiàn)

    手工搭建Servlet實(shí)現(xiàn)

    現(xiàn)在作為一個Java程序員,我們已經(jīng)習(xí)慣了使用IDE和Web框架進(jìn)行開發(fā),IDE幫助我們做了編譯、打包的工作。Spring框架則幫助我們實(shí)現(xiàn)了Servlet接口,并把Servlet容器注冊到了Web容器中。本文主要介紹了Servlet手工搭建,感興趣的可以了解一下
    2021-07-07
  • 在eclipse中修改tomcat的部署路徑操作

    在eclipse中修改tomcat的部署路徑操作

    這篇文章主要介紹了在eclipse中修改tomcat的部署路徑操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 一文深入了解Java中的AtomicInteger類

    一文深入了解Java中的AtomicInteger類

    AtomicInteger是java并發(fā)包下面提供的原子類,主要操作的是int類型的整型,通過調(diào)用底層Unsafe的CAS等方法實(shí)現(xiàn)原子操作,這篇文章主要給大家介紹了關(guān)于如何通過一文深入了解Java中AtomicInteger類的相關(guān)資料,需要的朋友可以參考下
    2024-02-02

最新評論