Spring_04_Bean 生命周期
来源:互联网 发布:php网络验证源码post 编辑:程序博客网 时间:2024/06/05 03:00
一、知识点概述
当一个 bean 被实例化时,可能需要执行一些数据初始化的工作。同样,当 bean 不再需要,从容器中移除时,可能需要做一些清除工作。
在Bean的配置中,通过属性init-method及destroy-method,分别处理实例化及销毁时的回调。
init-method 属性指定一个方法名,在实例化 bean 之后,立即调用该方法。同样,destroy-method 属性指定一个方法名,从容器中移除 bean 之后,该方法会被调用。
二、项目构建
1、创建Maven项目
<groupId>ycz.spring</groupId><artifactId>04_spring_lifecycle</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging>
2、添加对Spring的依赖
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.3.8.RELEASE</version></dependency><dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.3.8.RELEASE</version></dependency>
三、测试用例
1、测试init-method及destroy-method属性
- 新增JavaBean
在src/main/Java源路径下新增包com.ycz.spring.lifecycle
在com.ycz.spring.lifecycle包下新增类Section5,内容如下
public class Section4 { private String message; public void setMessage(String message) { System.out.println("开始初始化实例属性"); this.message = message; } public void sayHello() { System.out.println("Hello " + message); } // 本方法用于设置init-method属性,会在对象实例化之后执行 public void init() { System.out.println("开始执行初始化回调方法"); } // 本方法用于设置destroy-method属性,会在Bean销毁时执行 public void destroy() { System.out.println("开始执行销毁回调方法"); }}
- 注册Bean,在Spring配置文件中添加
<bean id="section5" class="com.ycz.spring.lifecycle.Section5" init-method="init" destroy-method="destroy"> <property name="message" value="Spring"/></bean>
- 编写启动类
public class Boot { public static void main(String[] args) { // 读取配置文件config.xml,启动IOC容器 AbstractApplicationContext ac = new ClassPathXmlApplicationContext("config.xml"); // 从IOC容器中获取Bean实例 Section5 bean = ac.getBean("section5", Section5.class); bean.sayHello(); ac.destroy(); }}
- 运行结果
开始初始化实例属性
开始执行初始化回调方法
Hello Spring
开始执行销毁回调方法
- 代码分析
因为没有设置lazy-init为true,所以Section5会在Spring容器启动时进行实例化。实例化的过程包括了对象的创建以及属性注入。
第一行代码,启动容器,首先会执行setMessage方法进行属性注入,打印输出“开始初始化实例属性”。
属性注入后,实例化过程完成,因为设置了属性init-method,则Spring会执行init-method设置的方法,用于初始化,打印输出“开始执行初始化回调方法”。
第三行代码,调用实例的sayHello方法,因为message属性已经在实例化时注入,所以打印输出“Hello Spring”。
第四行代码,销毁Spring容器,容器销毁则容器中的对象都将被销毁,因为Section5实例设置的destroy-method属性,在Section5销毁时会先执行设置的destroy方法,所以打印输出“开始执行销毁回调方法”。
- Spring_04_Bean 生命周期
- 生命周期
- 生命周期
- 生命周期
- 生命周期
- 生命周期
- 生命周期
- 生命周期
- 生命周期
- 生命周期
- 生命周期
- 生命周期
- 生命周期
- 生命周期
- 生命周期
- 生命周期
- 生命周期
- 生命周期
- 【LeetCode】1.Two Sum
- 随手记录的学习想法
- mysql function sf_get_full_manage_name_en
- 一个挺好的python中文分词库jieba
- 【已解决】:selenium.common.exceptions.WebDriverException: Message: 'geckodriver' ...
- Spring_04_Bean 生命周期
- 程序员应该思考的问题
- 重新定义一个全新的区块链运行架构:他们的技术有何不同?
- jsp
- 在TensorFlow中使用深度学习GANs处理图像
- Python之opencv 分水岭分割算法
- ImageLoade图片框架,包括加载圆形图片,包括图片错位问题
- 【ASP.NET 进阶】TreeView控件学习
- Android