spring中scope作用域,spring框架bean的scope属性值有

  spring中scope作用域,spring框架bean的scope属性值有

  

目录

@范围的几种取值弹簧入门详解范围属性一、范围属性二、范围分类三、范围取值

 

  

@Scope的几种取值

1、单线:一个弹簧容器中只有一个豆的实例,此为弹簧的默认配置,全容器共享一个实例

 

  2、原型:每次调用新建一个豆的实例

  3、请求:Web项目中,给每一个超文本传送协议(Hyper Text Transport Protocol的缩写)请求新建一个豆实例

  4、会话:Web项目中,给每一个超文本传送协议(Hyper Text Transport Protocol的缩写)会话新建一个豆实例。

  全球会议:这个只在入口应用中有用,给每一个全局超文本传送协议(Hyper Text Transport Protocol的缩写)会话新建一个豆实例。

  

Spring入门详解scope属性

 

  

一、scope属性

弹簧中范围是一个非常关键的概念,简单说就是对象在弹簧容器(国际奥委会容器)中的生命周期,也可以理解为对象在弹簧容器中的创建方式。

 

  

二、scope分类

目前,范围的取值有5种取值:

 

  在春天2.0之前,有一个和原型两种;

  在春天2.0之后,为支持网应用的应用程序上下文,增强另外三种:请求,会话和全球会议类型,它们只实用于网程序,通常是和XmlWebApplicationContext共同使用。

  

三、scope取值

1.singleton

 

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

  代码如下(示例):

  学生类

  包装实体;公共课学生{私立学校学生编号私有字符串studentname public Student(){ system。出去。println(无参构造函数被使用);} public int getStudentNo(){ return studentNo;} public void set student no(int student no){ this。学号=学号;} public String get student name(){返回学生姓名;} public void set student name(String student name){ this。学生姓名=学生姓名;}//@ Override//public String toString(){//return Student { // Student no= Student no/,Student name= Student name // } ;//}}测试代码

  包装测试;导入实体。学生;导入org。朱尼特。测试;导入org。spring框架。语境。应用程序上下文;导入组织。spring框架。语境。支持。classpathmlaplicationcontext公共类SpringTest { @Test//测试范围属性,scope= singleton public void test1(){ application context context=new classpathmlaplicationcontext( application context。XML’);学生学生1=(学生)语境。get bean(学生);学生学生2=(

  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的垃圾回收了以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行IT。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • spring编程式事务处理,spring编程事务
  • spring编程式事务处理,spring编程事务,详解Spring学习之编程式事务管理
  • spring的核心功能模块有几个,列举一些重要的spring模块
  • spring的核心功能模块有几个,列举一些重要的spring模块,七个Spring核心模块详解
  • spring注解和springmvc的注解,SpringMVC常用注解
  • spring注解和springmvc的注解,SpringMVC常用注解,详解springmvc常用5种注解
  • spring实现ioc的四种方法,spring的ioc的三种实现方式
  • spring实现ioc的四种方法,spring的ioc的三种实现方式,简单实现Spring的IOC原理详解
  • spring事务失效问题分析及解决方案怎么做,spring 事务失效情况
  • spring事务失效问题分析及解决方案怎么做,spring 事务失效情况,Spring事务失效问题分析及解决方案
  • spring5.0新特性,spring4新特性
  • spring5.0新特性,spring4新特性,spring5新特性全面介绍
  • spring ioc以及aop原理,springmvc aop原理
  • spring ioc以及aop原理,springmvc aop原理,深入浅析Spring 的aop实现原理
  • Spring cloud网关,spring cloud zuul作用
  • 留言与评论(共有 条评论)
       
    验证码: