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的生命周期讨论的更多相关文章

  1. 如果你每次面试前都要去背一篇Spring中Bean的生命周期,请看完这篇文章

    前言 当你准备去复习Spring中Bean的生命周期的时候,这个时候你开始上网找资料,很大概率会看到下面这张图: 先不论这张图上是否全面,但是就说这张图吧,你是不是背了又忘,忘了又背? 究其原因在于, ...

  2. JAVA面试题:Spring中bean的生命周期

    Spring 中bean 的生命周期短暂吗? 在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一 ...

  3. 深入理解Spring中bean的生命周期

    [Spring中bean的生命周期] bean的生命周期 1.以ApplocationContext上下文单例模式装配bean为例,深入探讨bean的生命周期: (1).生命周期图: (2).具体事例 ...

  4. Spring中Bean的生命周期及其扩展点

    原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/6106456.html Spring中Bean的管理是其最基本的功能,根据下面的图来了解Spr ...

  5. 简:Spring中Bean的生命周期及代码示例

    (重要:spring bean的生命周期. spring的bean周期,装配.看过spring 源码吗?(把容器启动过程说了一遍,xml解析,bean装载,bean缓存等)) 完整的生命周期概述(牢记 ...

  6. 通过BeanPostProcessor理解Spring中Bean的生命周期

    通过BeanPostProcessor理解Spring中Bean的生命周期及AOP原理 Spring源码解析(十一)Spring扩展接口InstantiationAwareBeanPostProces ...

  7. 一分钟掌握Spring中bean的生命周期!

    Spring 中bean 的生命周期短暂吗? 在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean 的别名只能维持 ...

  8. Spring中bean的生命周期!

    Spring 中bean 的生命周期短暂吗? 在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一 ...

  9. Spring中 bean的生命周期

    为什么要了解Spring中 bean的生命周期? 有时候我们需要自定义bean的创建过程,因此了解Spring中 bean的生命周期非常重要. 二话不说先上图: 在谈具体流程之前先看看Spring官方 ...

随机推荐

  1. python调试

    如果很简单的程序,建议还是pirnt打出来. 对于Linux环境,使用pdb/ipdb是一个不错的选择. 安装ipdb sudo pip install ipdb 开启调试 手动在需要调试的地方写入s ...

  2. Java中的换行符

    Java中的换行符 PrintWriter out = response.getWriter(); out.write("\r\n"); Java中的换行符"\r\n&q ...

  3. Activiti 实战篇 小试牛刀

    原文地址:http://blog.csdn.net/qq_30739519/article/details/51166062 1:工作流的概念   说明: 1) 假设:这两张图就是华谊兄弟的请假流程图 ...

  4. Flex中的FusionCharts 2D折线图

    Flex中的FusionCharts 2D折线图 1.设计源码 LineChart.mxml: <?xml version="1.0" encoding="utf- ...

  5. C#中各种计时器 Stopwatch、TimeSpan

    1.使用 Stopwatch 类 (System.Diagnostics.Stopwatch)Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间.在典型的 St ...

  6. Openstack_O版(otaka)部署_准备环境和依赖软件

    架构介绍 本次案列为基本的三节点部署 一:网络: 1.管理网络:192.168.198.0/24 2.数据网络:10.0.0.0/24 二:操作系统: CentOS Linux release 7.3 ...

  7. eclipse 修改默认的author

    1. 在eclipse.ini中添加 -vmargs -Duser.name={author name} 记得一定要在-vmargs之后,否则无效. 2. 设置eclipse参数 windows--& ...

  8. 【转】Nginx的启动、停止与重启

    Nginx的启动.停止与重启 启动 启动代码格式:nginx安装目录地址 -c nginx配置文件地址 例如: [root@LinuxServer sbin]# /usr/local/nginx/sb ...

  9. UltraEdit 脚本 实现查找替换

    UltraEdit中,要实现,脚本查找替换功能,按照下文中的做法稍作修改, 现象很奇怪,有时可以进行查找替换有时不能. http://blog.csdn.net/neareast/article/de ...

  10. 【BZOJ2127】happiness(最小割)

    [BZOJ2127]happiness(最小割) 题面 Description 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了, ...