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. 20 个 CSS 高级技巧汇总

    原文:https://segmentfault.com/a/1190000003936841 使用技巧会让人变的越来越懒,没错,我就是想让你变懒.下面是我收集的CSS高级技巧,希望你懒出境界. 1. ...

  2. php中静态变量和静态方法。

    在php类的内部当使用static进行修饰了类的属性或者方法,则改属性或者方法被成为类的静态属性或者静态访问, 静态属性和非静态属性的区别 php官方的解释 声明类成员或方法为static,就可以不实 ...

  3. javascript 学习笔记 -内部类

        js的内部类    javascript内部有一些可以直接使用的类    javascript主要有以下     object Array Math boolean      String D ...

  4. Flex和Servlet结合上传文件

    Flex和Servlet结合上传文件 1.准备工作 (1)下载文件上传的组件,commons-fileupload-1.3.1.jar (2)下载文件输入输出jar,commons-io-2.4.ja ...

  5. Java Web项目中缺少Java EE 6 Libraries怎么添加

    Java Web项目中缺少Java EE 6 Libraries怎么添加 具体步骤如下: 1.项目名称上点击鼠标右键,选择"Build Path-->Configure Build P ...

  6. Scheme change not implemented

    1.错误描述 2.错误原因 由于在改变Java代码中的方法或运行代码出现,导致Tomcat编译的代码不能替换工作空间的代码,即不能及时同步,出现错误 3.解决办法 (1)关闭Tomcat,clean一 ...

  7. org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'transactionManager'

    1.错误描述 五月 01, 2015 2:12:31 下午 org.hibernate.validator.util.Version <clinit> 信息: Hibernate Vali ...

  8. gstreamer在Ubuntu下构建开发环境

    1,Ubuntu已经安装了gstreamer库,因此只需要再安装几个开发库即可,是 libstreamer0.-libstreamer0.-devlibstreamer0.--dbg 在新立得里选中应 ...

  9. Django学习-6-路由系统

    1.url(r'^index/', views.index), 函数处理       url(r'^home/', views.Home.as_view()),           类方法处理     ...

  10. Java语法 示例

    第二章: int:整型 double:双精度浮点型 char:字符型 String:字符串型语法:数据类型 变量名: 如:String name: 变量名=值: 如:name="张三&quo ...