Spring简明分析Bean作用域

目录
  • Bean作用域
  • 一、singleton(单例模式)
  • 二、protoType(原型模式)

Bean作用域

  经过前面的学习,我们可以知道bean是存在作用域的。

  从spring的官方文档中发现spring支持六种作用域,我们只需要重点认识singleton、protoType即可,后面的作用域都是于web框架相关的。

一、singleton(单例模式)

  就和图中的一样,如果bean的作用域为singleton,那么在IOC容器中只有每个bean只有一个唯一的实例被创建。

我们通过代码来认识一下,bean的单例模式

bean的作用域默认是singleton,我们也可以手动通过在xml的bean中scope进行设置。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="user" class="pojo.User" scope="singleton"/>
</beans>

根据同一个bean 获取两次实例,查看实例是否相同

    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        User user1 = context.getBean("user", User.class);
        User user2 = context.getBean("user",User.class);
        System.out.println(user1==user2);
    }

查看运行结果

说明 这个Bean的作用域是单例模式,根据这个bean只能创建一个唯一的实例。

二、protoType(原型模式)

就和图中的一样,如果bean的作用域为protoType,那么在IOC容器中每个bean都可以创建多个实例。

我们通过代码来认识一下,bean的原型模式

bean的作用域默认是singleton,我们也可以手动通过在xml的bean中scope进行设置成 protoType。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="user" class="pojo.User" scope="prototype"/>
</beans>

根据同一个bean 获取两次实例,查看实例是否相同

    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        User user1 = context.getBean("user", User.class);
        User user2 = context.getBean("user",User.class);
        System.out.println(user1==user2);
    }

查看运行结果

说明了当设置bean为 protoType时,一个bean可以创建多个不同的实例。

到此这篇关于Spring简明分析Bean作用域的文章就介绍到这了,更多相关Spring Bean作用域内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 最全总结SpringBean的作用域管理

    一.前言 创建 BeanDefinition 时,就等于创建了一个配方,用于创建由 BeanDefinition 所定义的类实例.BeanDefinition 是配方的这种思想很重要,因为这意味着,与使用类一样,也可通过一个配方创建多个对象实例. 有如下优点: 可以控制要插入到从特定 BeanDefinition 创建的对象中的各种依赖项和配置值 可以控制从特定 BeanDefinition 创建的对象的作用域. 这种方式功能强大且灵活,因为开发者可以选择通过配置创建的对象的作用域,而不必在Ja

  • Spring IOC原理补充说明(循环依赖、Bean作用域等)

    前言 通过之前的几篇文章将Spring基于XML配置的IOC原理分析完成,但其中还有一些比较重要的细节没有分析总结,比如循环依赖的解决.作用域的实现原理.BeanPostProcessor的执行时机以及SpringBoot零配置实现原理(@ComponentScan.@Import.@ImportSource.@Bean注解的使用和解析)等等.下面就先来看看循环依赖是怎么解决的,在此之前一定要熟悉整个Bean的实例化过程,本篇只会贴出关键性代码. 正文 循环依赖 首先来看几个问题: 什么是循环依

  • SpringIOC容器Bean的作用域及生命周期实例

    目录 bean作用域 1. 默认单实例 2. 设置多实例 bean生命周期 一.生命周期过程示例 二.更完整的过程 1. 创建后置处理器 bean作用域 bean的作用域,其实就是设置创建 bean 的实例是属于单实例,还是多实例. 1. 默认单实例 默认情况下,创建的 bean 是单实例对象. 比如,用之前的代码为例: @Test public void testCollection2() { ApplicationContext context = new ClassPathXmlAppli

  • 详解Spring中Bean的作用域与生命周期

    目录 一.Bean的作用域 二.Bean的生命周期 使用代码演示Bean的生命周期 一.Bean的作用域 通过Spring容器创建一个Bean的实例时,不仅可以完成Bean的实例化,还可以使用Bean的scope属性为bean设置作用域. 语法格式:<bean id="别名" scope="作用域" class="对应实现类"> 作用域的种类:(sing) singleton和prototype区别:(该两种比较常用) ① singl

  • 一文搞懂Spring中的Bean作用域

    目录 概述 Singleton prototype request session application 概述 scope用来声明容器中的对象所应该处的限定场景或者说该对象的存活时间,即容器在对象进入其 相应的scope之前,生成并装配这些对象,在该对象不再处于这些scope的限定之后,容器通常会销毁这些对象. Spring容器bean的作用域类型: singleton:Spring IoC 容器的单个对象实例作用域都默认为singleton prototype:针对声明为拥有prototyp

  • Spring中Bean的作用域和自动装配方式

    目录 Bean的作用域 默认配置 scope = "singleton" scope = "prototype" Bean的自动装配 通过name自动装配 通过type自动装配 Bean的作用域 Spring中bean的作用域共有singleton.prototype.request.session.application.websocket六种 其中后四种都是用在Web应用程序中的,主要介绍前两种singleton(单例)和prototype(原型) Bean的作

  • 一文搞懂Spring Bean中的作用域和生命周期

    目录 一.Spring Bean 作用域 singleton(单例) prototype(原型) 小结 二.Spring Bean生命周期 如何关闭容器 生命周期回调 通过接口设置生命周期 通过xml设置生命周期 一.Spring Bean 作用域 常规的 Spring IoC 容器中Bean的作用域有两种:singleton(单例)和prototype(非单例) 注:基于Web的容器还有其他种作用域,在这就不赘述了. singleton(单例) singleton是Spring默认的作用域.当

  • Spring中Bean的作用域与生命周期详解

    目录 一.Bean的作用域 1.单实例Bean声明 2.多实例Bean声明 二.Bean的生命周期 1.bean的初始和销毁 2.bean的后置处理器 总结 一.Bean的作用域 首先我们来讲一下有关于bean的作用域, 一般情况下,我们书写在IOC容器中的配置信息,会在我们的IOC容器运行时被创建,这就导致我们通过IOC容器获取到bean对象的时候,往往都是获取到了单实例的Bean对象, 这样就意味着无论我们使用多少个getBean()方法,获取到的同一个JavaBean都是同一个对象,这就是

  • Spring简明分析Bean作用域

    目录 Bean作用域 一.singleton(单例模式) 二.protoType(原型模式) Bean作用域   经过前面的学习,我们可以知道bean是存在作用域的.   从spring的官方文档中发现spring支持六种作用域,我们只需要重点认识singleton.protoType即可,后面的作用域都是于web框架相关的. 一.singleton(单例模式)   就和图中的一样,如果bean的作用域为singleton,那么在IOC容器中只有每个bean只有一个唯一的实例被创建. 我们通过代

  • Spring实战之Bean的作用域singleton和prototype用法分析

    本文实例讲述了Spring实战之Bean的作用域singleton和prototype用法.分享给大家供大家参考,具体如下: 一 配置 <?xml version="1.0" encoding="GBK"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/

  • Spring实战之Bean的作用域request用法分析

    本文实例讲述了Spring实战之Bean的作用域request用法.分享给大家供大家参考,具体如下: 一 配置 1 applicationContext.xml <?xml version="1.0" encoding="GBK"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframewor

  • Spring框架开发scope作用域分析总结

    目录 1.scope 作用域 2.Idea中默认为singleton 1.scope 作用域 Spring 管理的 bean 是根据 scope 来⽣成的,表示 bean 的作⽤域,共4种,默认值是 singleton. singleton:单例,表示通过 IoC 容器获取的 bean 是唯⼀的.(即可以理解成即时加载) prototype:原型,表示通过 IoC 容器获取的 bean 是不同的.(需要用到的时候去创建) request:请求,表示在⼀次 HTTP 请求内有效. session:

  • Spring Bean作用域与生命周期深入讲解

    目录 1.作用域定义 Bean 的作用域 Bean 的 6 种作用域 单例作用域(singleton)和全局作用域(application)区别 2.设置作用域 3.Bean 原理分析 3.1 Bean(Spring)执行流程 3.2 Bean生命周期 1.作用域定义 限定程序中变量的可用范围叫做作用域,或者说在源代码中定义变量的某个区域就叫做作用域. Bean 的作用域 而 Bean 的作用域是指 Bean 在 Spring 整个框架中的某种行为模式,比如 singleton 单例作用域,就表

  • Spring实战之协调作用域不同步的Bean操作示例

    本文实例讲述了Spring实战之协调作用域不同步的Bean操作.分享给大家供大家参考,具体如下: 一 配置 <?xml version="1.0" encoding="GBK"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xs

  • 简单了解spring bean作用域属性singleton和prototype的区别

    这篇文章主要介绍了简单了解spring bean作用域属性singleton和prototype的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.singleton 当一个bean的作用域设置为singleton, 那么Spring IOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例. 换言之,当把一个bean定义设置为singleton作用域时,Sprin

  • SPRING FRAMEWORK BEAN作用域和生命周期原理解析

    这篇文章主要介绍了SPRING FRAMEWORK BEAN作用域和生命周期原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Spring beand的作用域 设置为singleton时,相当于一个类只能有一个实例,当再次申请时,返回的是同一个实例 可以看到两个bean实例的hashcode值是一样的,说明在此申请到的是同一个实例 将bean的作用域设置为prototype时,再次运行,可以看到,申请到的是两个不同bean实例 目前只学习

  • 面试Spring中的bean线程是否安全及原因

    目录 SpringBean作用域 spring单例,为什么controller.service和dao确能保证线程安全? 总结 面试官经常喜欢问Spring中的bean是不是线程安全的这个问题用来考察对Spring  中Bean作用域的理解,先说结论,Spring中的Bean不是线程安全的. Spring容器中的Bean是否线程安全,容器本身并没有提供Bean的线程安全策略,因此可以说Spring容器中的Bean本身不具备线程安全的特性,但是具体还是要结合具体scope的Bean去研究. Spr

随机推荐