Spring配置使用之Bean生命周期详解

所属分类: 软件编程 / java 阅读数: 14
收藏 0 赞 0 分享

基本概念

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...

总结

以上就是本文关于Spring配置使用之Bean生命周期详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:Spring中bean的继承与抽象代码示例spring中的FactoryBean代码示例等,有什么问题,欢迎大家留言交流讨论。感谢朋友们对脚本之家网站的支持!

更多精彩内容其他人还在看

Java数据类型的规则

这篇文章主要介绍了Java数据类型的规则的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Spring整合TimerTask实现定时任务调度

这篇文章主要介绍了Spring整合TimerTask实现定时任务调度的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

详解SpringMVC使用MultipartFile实现文件的上传

本篇文章主要介绍了SpringMVC使用MultipartFile实现文件的上传,本地的文件上传到资源服务器上,比较好的办法就是通过ftp上传。这里是结合SpringMVC+ftp的形式上传的,有兴趣的可以了解一下。
收藏 0 赞 0 分享

SpringMVC上传文件的三种实现方式

本篇文章主要介绍了SpringMVC上传文件的三种实现方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

微信公众帐号开发-自定义菜单的创建及菜单事件响应的实例

本篇文章主要介绍了微信公众帐号开发-自定义菜单的创建及菜单事件响应的实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
收藏 0 赞 0 分享

浅析Java中的继承与组合

本文将介绍组合和继承的概念及区别,并从多方面分析在写代码时如何进行选择。文中通过示例代码介绍的很详细,有需要的朋友可以参考借鉴,下面来一起看看吧。
收藏 0 赞 0 分享

利用反射获取Java类中的静态变量名及变量值的简单实例

下面小编就为大家带来一篇利用反射获取Java类中的静态变量名及变量值的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

java启动线程的3种方式对比分析

这篇文章主要为大家对比分析了java启动线程的3种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

SpringMVC上传和解析Excel方法

这篇文章主要介绍了SpringMVC上传和解析Excel方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

JAVA中String类与StringBuffer类的区别

这篇文章主要为大家详细介绍了JAVA中String类与StringBuffer类的区别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享
查看更多