当前位置:   article > 正文

Spring~bean的作用域(scope)和生命周期_springbean的生命周期和作用域

springbean的生命周期和作用域


一、bean 作用域

1.在 Spring 里面,默认情况下,bean 是单实例对象

@Test
public void demo1() {
    ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
    Stu stu1 = (Stu) ac.getBean("stu");
    Stu stu2 = (Stu) ac.getBean("stu");
    System.out.println(stu1);
    System.out.println(stu2);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

结果:(输出的引用相同)
在这里插入图片描述

2.如何设置单实例还是多实例?

  1. 在 spring 配置文件 bean 标签里面有属性(scope)用于设置单实例还是多实例
  2. scope 属性值
    第一个值 默认值,singleton,表示是单实例对象
    第二个值 prototype,表示是多实例对象
 <bean id="stu" class="com.ricky.pojo.Stu" scope="prototype">
  • 1

设置为多例时的结果:
在这里插入图片描述

3.singleton 和 prototype 区别

  • singleton 单实例,prototype 多实例
  • 设置 scope 值是 singleton 时候,加载 spring 配置文件时候就会创建单实例对象
  • 设置 scope 值是 prototype 时候,不是在加载 spring 配置文件时候创建 对象,在调用getBean方法时候创建多实例对象

二、bean 生命周期

1.bean 生命周期

(1)通过构造器创建 bean 实例(无参数构造)
(2)为 bean 的属性设置值和对其他 bean 引用(调用 set 方法)
(3)调用 bean 的初始化的方法(需要进行配置初始化的方法)
(4)bean 可以使用了(对象获取到了)
(5)当容器关闭时候,调用 bean 的销毁的方法(需要进行配置销毁的方法)

public class Orders {

    //无参数构造
    public Orders() {
        System.out.println("第一步 执行无参数构造创建bean实例");
    }

    private String oname;

    public void setOname(String oname) {
        this.oname = oname;
        System.out.println("第二步 调用set方法设置属性值");
    }

    //创建执行的初始化的方法
    public void initMethod() {
        System.out.println("第三步 执行初始化的方法");
    }

    //创建执行的销毁的方法
    public void destroyMethod() {
        System.out.println("第五步 执行销毁的方法");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

xml中配置:

<bean id="orders" class="com.ricky.bean.Orders" init-method="initMethod" destroy-method="destroyMethod">
   <property name="oname" value="电话"/>
</bean>
  • 1
  • 2
  • 3

测试方法:

@Test
public void demo2() {
    ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
    Orders orders = (Orders) ac.getBean("orders");
    System.out.println("第四步:获取bean的实例化对象");
    System.out.println(orders);
    ac.close();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

运行结果:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/540216
推荐阅读
相关标签
  

闽ICP备14008679号