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...
总结
以上就是本文关于Spring配置使用之Bean生命周期详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:Spring中bean的继承与抽象代码示例、spring中的FactoryBean代码示例等,有什么问题,欢迎大家留言交流讨论。感谢朋友们对脚本之家网站的支持!
- String类replaceAll方法正则替换深入分析
- 微信硬件平台对接--蓝牙
- 初试git+github(linux环境)
- Raspberry PI Nginx 安装
- 微信支付-Java-SpringMVC基础一些代码支持
- 使用Kafka的High Level Consumer
- 微信公众号发送模板消息 Java实现。
- [Intellij IDEA]File size exceeds configured limit
- 那些年Struts 1.X 而今我还是不会
- 关于MySQL DNS解析探究之一:DNS解析确实在起作用
- 每一个程序员需要了解的10个Linux命令
- 实战案例 | 使用机器学习和大数据预测心脏病
- 关于JVM直接内存触发Full GC
- 极客DIY:通过树莓派发送摩斯码
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 给卷积神经网络动动刀:加法网络探究
- 用Python网络爬虫来看看最近电影院都有哪些上映的电影
- 使用 Azure Blob Stoage 实现一个静态文件服务器
- java学习--反射详解
- Redis中的管道Pipeline操作
- 查看YARN任务日志的几种方式
- 简易数字频率计(verilog HDL设计)(2020维护版本)
- C++核心准则CP.111:如果真的需要好双重检查锁,使用惯用模式
- C++核心准则CP.200:使用volatile只能表明该变量是非C++内存
- C++核心准则E.2:通过抛出异常来表明函数无法执行指定的任务
- C++核心准则E.3:异常应该只用于错误处理
- [Go] GO语言实战-gin框架项目实现中英文切换
- [Go] Go语言实战-基于websocket浏览器通知的实现
- 快10年的老前端了,我还分不清 slice 和 splice,这到底是谁的锅
- 第4章 Jenkins系统用户认证配置管理