json.parse(json.stringify)的弊端_前端session的用法「建议收藏」

json.parse(json.stringify)的弊端_前端session的用法「建议收藏」文章目录一、scope属性二、scope分类二、scope取值1.singleton2.prototype总结一、scope属性spring中scope是一个非常关键的概念,简单说就是对象在spring容器(IOC容器)中的生命周期,也可以理解为对象在spring容器中的创建方式。二、scope分类目前,scope的取值有5种取值:在Spring2.0之前,有singleton和prototype两种;在Spring2.0之后,为支持web应用的ApplicationContext,增强另_springscope属性

文章目录

  • 一、scope属性
  • 二、scope分类
  • 二、scope取值
    • 1.singleton
    • 2.prototype

一、scope属性

spring中scope是一个非常关键的概念,简单说就是对象在spring容器(IOC容器)中的生命周期,也可以理解为对象在spring容器中的创建方式。

二、scope分类

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

在Spring 2.0之前,有singleton和prototype两种;

在Spring 2.0之后,为支持web应用的ApplicationContext,增强另外三种:request,session和global session类型,它们只实用于web程序,通常是和XmlWebApplicationContext共同使用。

二、scope取值

1.singleton

此取值时表明容器中创建时只存在一个实例,所有引用此bean都是单一实例。用代码实例

代码如下(示例):
Student类

package entity;

public class Student { 
   
    private int studentNo;
    private String studentName;

    public Student() { 
   
        System.out.println("无参构造函数被使用");
    }

    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"
        /**输出结果地址一致(哈希值) *无参构造函数被使用 * entity.Student@78186a70 * entity.Student@78186a70 */

    }
}

在输出的结果中我们可以看出,当设置为singleton时,加载的两个Student的哈希值一致,同时无参构造函数被调用一次,如果通过断点测试可以发现在加载文件时,无参构造函数就已经被调用(如下图)
在这里插入图片描述
总结:Bean的实例化的个数: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"

        /** * 输出结果 * 无参构造函数被使用 * 无参构造函数被使用 * entity.Student@67b467e9 * entity.Student@47db50c5 * */
    }
}

首先在测试结果中,我们可以看出,两个Student的哈希值不一致,而且无参构造函数被执行了两次,接着我们在用断点测试一下
在这里插入图片描述
从测试的结果来看,此时的无参构造函数是在实例化Student的时候被调用的。我看到过一个大佬举的一个例子,我来引用一下 “如同分苹果,将苹果的bean的scope属性声明为prototype,在每个人领取苹果的时候,我们都是发一个新的苹果给他,发完之后,别人爱怎么吃就怎么吃,爱什么时候吃什么时候吃,但是注意吃完要把苹果核扔到垃圾箱!对于那些不能共享使用的对象类型,应该将其定义的scope设为prototype。”
总结:Bean的实例化的个数:多个
bean的实例化时机:当spring核心文件被加载是,实例化配置的bean实例。
对象运行;只对象在就一直活着
对象销毁:当对象长时间不用时,被java的垃圾回收了


今天的文章json.parse(json.stringify)的弊端_前端session的用法「建议收藏」分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/58453.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注