zoukankan      html  css  js  c++  java
  • (II)第七节:bean 的作用域

    Bean 的作用域

      在 Spring 中,可以在 <bean> 元素的 scope 属性里设置 bean 的作用域,以决定这个 bean 是单实例的还是多实例的。
     
      默认情况下,Spring 只为每个在 IOC 容器里声明的 bean 创建唯一一个实例(Spring 中默认是单例的 bean),整个 IOC 容器范围内都能共享该实例;
      所有后续的 getBean() 调用和  bean 引用都将返回这个唯一的 bean 实例,该作用域被称为 singleton,它是所有 bean 的默认作用域。
     
     
      scope 用于设置 bean 的作用域,其取值有 singleton | prototype | request | session
     
    singleton:单例,唯一实例,默认的
    prototype:原型,多例的(Java中默认情况)
    request:在web环境下,同义词请求创建一个Bean实例,在一次请求中创建一个 bean 
    session:在web环境下,同义词请求创建一个Bean实例,在一次会话中创建一个 bean

    singleton:单实例的,默认的

      (1)在容器启动完成之前就已经创建好对象,保存在容器中了;

      (2)任何获取都是获取之前创建好的那个对象;

    prototype:多实例的

      (1)容器启动默认不会去创建多实例 bean;

      (2)获取的时候创建多实例 bean;

      (3)每次获取都会创建一个新的对象;

    注意
        当 bean 的作用域为单例时,Spring 会在 IOC 容器初始化时就创建 bean 的对象实例;
        而当 bean 的作用域为 prototype 时,IOC 容器会在获取 bean 的实例时创建 bean 的实例对象(即在使用 bean 时,才进行创建实例对象)
     
      配置bean 的作用域:
        <bean id="book01" class="com.njf.spring.bean.Book" scope="singleton"></bean>
    
        <bean id="book02" class="com.njf.spring.bean.Book" scope="prototype"></bean>
     
      测试代码:
        @Test
        public void test4() {
            ApplicationContext ioc = new ClassPathXmlApplicationContext("ioc3.xml");
    
            Object book01 = ioc.getBean("book01");
            Object _book01 = ioc.getBean("book01");
            System.out.println(book01 == _book01); //true
    
            Object book02 = ioc.getBean("book02");
            Object _book02 = ioc.getBean("book02");
            System.out.println(book02 == _book02); //false
        }
     
     
     
     
  • 相关阅读:
    python爬取斗图网中的 “最新套图”和“最新表情”
    SpringBoot (1) idea下的环境搭建及demo
    python爬取视频网站m3u8视频,下载.ts后缀文件,合并成整视频
    微信小程序—day05
    从零起步做到Linux运维经理, 你必须管好的23个细节
    前后端分离原理
    图文并茂|为你揭开微服务架构的“神秘面纱”!
    swarm集群日常部分操作
    OpenStack 部署运维实战
    京东618:Docker扛大旗,弹性伸缩成重点 (2015-06-23)
  • 原文地址:https://www.cnblogs.com/niujifei/p/15414920.html
Copyright © 2011-2022 走看看