Spring 配置使用 - Bean 生命周期

基本概念

Spring 中的 Bean 的生命周期,指的是 Bean 从创建到销毁的过程。

下面来探究下几个有关 Bean 生命周期配置的属性。


lazy-init

lazy-init 表示延迟加载 Bean,默认在 Spring IoC 容器初始化时会实例化所有在配置文件定义的 Bean,若启用了 lazy-init 则在调用 Bean 时才会去创建 Bean。

  • 定义 Bean:
public class Animals {
     public Animals(){
         System.out.println("creating...");
     }
}
  • 配置方式如下(以 xml 文件为例):
<!-- 表示启用了延迟加载 -->
<bean  id="animals" class="com.demo.Animals" lazy-init="true"/>

<!-- 不启用延迟加载 -->
<bean  id="animals" class="com.demo.Animals" lazy-init="default"/>
<bean  id="animals" class="com.demo.Animals" />
  • 调用验证:
// 创建容器
String location = ...
ApplicationContext factory = new FileSystemXmlApplicationContext(location);

// 输出结果:
// 若启用了 lazy-init 则输出 creating...,否则无打印信息。

depends-on

depends-on 是指指定 Bean 初始化及销毁时的顺序。该属性可以用于标识当前 Bean 初始化之前显式地强制一个或多个 Bean 被初始化。若指定 Bean 的作用域都是 singleton 时,表示该属性指定的 Bean 要在当前 Bean 销毁之前被销毁。

  • 在 Bean 中定义:
public class BeanOne{
     public BeanOne(){
         System.out.println("BeanOne...");
     }
}

public class BeanTwo{
     public BeanTwon(){
         System.out.println("BeanTwo...");
     }
}
  • 在配置文件中定义:
<bean id="beanOne" class="com.demo.BeanOne" lazy-init="true"  depends-on="beanTwo" />  

<bean id="beanTwo" class="com.demo.BeanTwo" lazy-init="true"  />  
  • 调用验证:
String location = ...
ApplicationContext factory = new FileSystemXmlApplicationContext(location);

BeanOne beanOne= (BeanOne)factory.getBean("beanOne");

// 输出结果:
// BeanTwo...
// BeanOne...

观察输出结果,调用 BeanOne 时,Spring 会自动创建 BeanTwo 实例。


init-method & destory-method

当实例化一个 Bean 时,可能需要执行一个初始化操作来确保该 Bean 可用状态。同样地,当不需要 Bean 时,将其从容器中移除时,可能还需要按顺序执行一些清楚工作。

为 Bean 定义初始化和销毁操作,需要使用 init-method 和 destory-method 属性。

  • 定义 Bean
// 进入房间后要开灯,离开房间后要关灯
public class Room {

    public Room(){
        System.out.println("enter room...");
    }

    public void turnOnLights(){
        System.out.println("turn on...");
    }

    public void turnOffLights(){
        System.out.println("turn off...");
    }
}
  • 在 Xml 文件中配置
<bean class="com.demo.Room"  init-method="turnOnLights" destroy-method="turnOffLights"/>
  • 在 Ioc 容器中实例化该 Bean,在销毁它
// 实例化 Bean
FileSystemXmlApplicationContext context = ...

// 销毁 Bean
context.registerShutdownHook();  

// 输出内容:
// enter room...
// turn on...
// turn off...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oxf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值