Spring中Bean的生命周期讨论
1、代码和配置文件准备
1.1、测试类(user.java)
public class User {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void say() {
System.out.println("hello man ");
}
public User() {
super();
// TODO Auto-generated constructor stub
}
//初始化方法定义
public void init() {
System.out.println("user init...");
}
//销毁方法定义
public void destory() {
System.out.println("user destory...");
}
}
1.2、配置文件(applicationcontext.xml)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"> <!-- 配置:单例、初始化方法、销毁方法 与user.java对应 -->
<bean id="user" class="com.spring.mybean.User" init-method="init" destroy-method="destory" scope="singleton"></bean>
</beans>
1.3、测试方法
@Test
public void testLoad() {
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationcontext.xml");
Object bean = context.getBean("user");
ClassPathXmlApplicationContext cxf = (ClassPathXmlApplicationContext)context;
cxf.close();
}
2、输出定位
2.1、测试条件(单例)
在测试方法的第3行打断点,当走完第3行,到达第4行,控制台输出user init ...,说明user bean在容器初始化即applicationcontext.xml加载的时候就初始化成功了。
断点继续往下,当走完第6行,控制台输出 user destory ...,说明user bean已经被销毁了。
2.2、测试条件(单例,lay-init="true")
修改配置文件,测试类代码同上
<bean id="user" class="com.spring.mybean.User" init-method="init" destroy-method="destory" scope="singleton" lazy-init="true"></bean>
在测试方法的第3行打断点,当走完第3行,到达第4行,控制台没有输出user init ...,说明user bean在容器初始化即applicationcontext.xml加载的时候并没有初始化,当走完第4行,到达底5行,控制台输出user init ...,说明user bean 在从容器获取user bean 的时候进行的初始化。销毁也是在走完第6行的时候进行的user bean销毁操作.
2.3、测试条件(多例,lay-init="true")
修改配置文件
<bean id="user" class="com.spring.mybean.User" init-method="init" destroy-method="destory" scope="prototype" lazy-init="true"></bean>
在测试方法的第3行打断点,当走完第3行,到达第4行,控制台没有输出user init ...,说明user bean在容器初始化即applicationcontext.xml加载的时候并没有初始化,当走完第4行,到达底5行,控制台输出user init ...,说明user bean 在从容器获取user bean 的时候进行的初始化。走完第6行,控制台也没有输出user destory ...,说明当bean设置为多例的时候,容器销毁的时候bean并没有调用destory方法
3、总结
3.1、单例,没有设置lay-init="true"时,bean在容器加载的时候进行的初始化,在容器关闭的时候进行销毁
3.2、单例,设置lay-init="true"时,bean在从容器中获取相关bean时,或者说调用实例对象的时候进行的初始化,在容器关闭的时候进行销毁
3.3、当scope不是单例即singleton时,初始化周期同上,但销毁方法不会触发
Spring中Bean的生命周期讨论的更多相关文章
- 如果你每次面试前都要去背一篇Spring中Bean的生命周期,请看完这篇文章
前言 当你准备去复习Spring中Bean的生命周期的时候,这个时候你开始上网找资料,很大概率会看到下面这张图: 先不论这张图上是否全面,但是就说这张图吧,你是不是背了又忘,忘了又背? 究其原因在于, ...
- JAVA面试题:Spring中bean的生命周期
Spring 中bean 的生命周期短暂吗? 在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一 ...
- 深入理解Spring中bean的生命周期
[Spring中bean的生命周期] bean的生命周期 1.以ApplocationContext上下文单例模式装配bean为例,深入探讨bean的生命周期: (1).生命周期图: (2).具体事例 ...
- Spring中Bean的生命周期及其扩展点
原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/6106456.html Spring中Bean的管理是其最基本的功能,根据下面的图来了解Spr ...
- 简:Spring中Bean的生命周期及代码示例
(重要:spring bean的生命周期. spring的bean周期,装配.看过spring 源码吗?(把容器启动过程说了一遍,xml解析,bean装载,bean缓存等)) 完整的生命周期概述(牢记 ...
- 通过BeanPostProcessor理解Spring中Bean的生命周期
通过BeanPostProcessor理解Spring中Bean的生命周期及AOP原理 Spring源码解析(十一)Spring扩展接口InstantiationAwareBeanPostProces ...
- 一分钟掌握Spring中bean的生命周期!
Spring 中bean 的生命周期短暂吗? 在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean 的别名只能维持 ...
- Spring中bean的生命周期!
Spring 中bean 的生命周期短暂吗? 在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一 ...
- Spring中 bean的生命周期
为什么要了解Spring中 bean的生命周期? 有时候我们需要自定义bean的创建过程,因此了解Spring中 bean的生命周期非常重要. 二话不说先上图: 在谈具体流程之前先看看Spring官方 ...
随机推荐
- R用户的福音︱TensorFlow:TensorFlow的R接口
------------------------------------------------------------ Matt︱R语言调用深度学习架构系列引文 R语言︱H2o深度学习的一些R语言实 ...
- MySQL出现“错误1067:进程意外终止”
1.错误描述 2.错误原因 今天,我在摸索如何利用命令查看MySQL日志,查了很多资料,大多数是通过修改my.ini文件配置.我修改了配置后,准备重启MySQL服务器,先执行了net stop mys ...
- AM335x(TQ335x)学习笔记——使用dtb方式启动内核
老式的u-boot使用ATAGS的方式启动linux内核,本文使用新式的dtb方式启动内核. 我使用的内核是linux-3.17.2版本,下面开始编译内核. (1) 解压内核 [php] view p ...
- Outlook 2010 对话简介 邮件自动关联
对话简介 默认情况下,Microsoft Outlook 2010 收件箱中的电子邮件按日期进行组织并按对话进行排列,对话将具有相同主题的邮件组合为能以展开或折叠形式进行查看的对话.这在帮助您提高浏览 ...
- docker学习系列(三):docker镜像的分层结构
docker的镜像分层 docker里的镜像绝大部分都是在别的镜像的基础上去进行创建的,也就是使用镜像的分层结构. 实验 比如说使用dockerfile去创建一个最简单的hello镜像.创建好对应的d ...
- 生成report由Eamil定時寄出
Blat 是一个命令行发邮件的小工具,仅支持简单的SMTP协议,需要SMTP服务器的支持. 官网:http://www.blat.net/ 下载地址:https://sourceforge.ne ...
- 过滤器(Filter)和拦截器(Interceptor)
之前总是弄混这两者,今天看了几篇文章,小结一下在这里. Filter介绍 Filter可以认为是Servlet的一种"加强版",它主要用于对用户请求进行预处理,也可以对HttpSe ...
- 【SPOJ】Distinct Substrings(后缀自动机)
[SPOJ]Distinct Substrings(后缀自动机) 题面 Vjudge 题意:求一个串的不同子串的数量 题解 对于这个串构建后缀自动机之后 我们知道每个串出现的次数就是\(right/e ...
- [Luogu2664]树上游戏
题面戳我 sol 点分.我们面临的最主要一个问题,就是如何在\(O(n)\)的时间内算出所有LCA为根的点对的贡献,还要分别累加到它们自己的答案中去. \(num_i\):每一种颜色的数量.你可以认为 ...
- BZOJ第7页养成计划
嗯,用这篇博客当一个目录,方便自己和学弟(妹?)们查阅.不定期更新. BZOJ1600 BZOJ1601 BZOJ1602 BZOJ1603 BZOJ1604 BZOJ1605 ...