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
        }
     
     
     
     
  • 相关阅读:
    【SCOI 2011】 糖果
    【POJ 3159】 Candies
    【POJ 1716】 Integer Intervals
    【POJ 2983】 Is the information reliable?
    【POJ 1364】 King
    【POJ 1201】 Intervals
    【POJ 1804】 Brainman
    6月10日省中提高组题解
    【POJ 3352】 Road Construction
    【POJ 1144】 Network
  • 原文地址:https://www.cnblogs.com/niujifei/p/15414920.html
Copyright © 2011-2022 走看看