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. R语言︱SNA-社会关系网络—igraph包(中心度、中心势)(二)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- SNA社会关系网络分析中,关键的就是通过一些指 ...

  2. 不使用spring的情况下用java原生代码操作mongodb数据库的两种方式

    由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常.   主要原因实际上是和mongodb本身无关的,因为他们改的是配置 ...

  3. dedecms 在php5.4以上环境下 无法保存中文

    dedecms gbk版本在php5.4以上环境下 无法保存中文 原因在于5.4.0对这个函数的变化:htmlspecialchars5.4.0   The default value for the ...

  4. Java中替换HTML标签的方法

    1.替换HTML标签 replaceAll("\\&[a-zA-Z]{0,9};", "").replaceAll("<[^>]* ...

  5. Adobe RIA 开发工程师认证考试大纲

    AdobeRIA 开发工程师认证考试大纲 考题数量:共90道题,考试通过正确率:60% 考试时间:120分钟  试题种类:单选题.多选题和判断题     1. Adobe RIA基础知识(2道题)  ...

  6. sourcetree的使用

    sourcetree的使用 仓库 使用source tree自带的clone,用source tree生成密钥对进行免登录. 分支 从master出发,新建一个分支/从远程获取一个分支.在这个分支做开 ...

  7. 校园网IPv6加速

    对于广大学生来说,上网是一件很纠结的事情,校园网要么按时间计费,要么按流量计费,要么是校园宽带.按时间计费速度慢,按流量计费费用高,校园宽带还不能共享,只能电脑开热点给手机上网.有没有既能提高网速又经 ...

  8. 网络协议笔记-网络层-ARP协议

    [2-地址解析协议ARP] [2.1-基本概念] 地址解析协议ARP的作用是根据主机的IP地址,找出该主机的硬件地址. [2.2-为什么要使用ARP] 在数据传输过程中,网络层使用的IP地址,但是在实 ...

  9. PyCharm链接服务器同步代码

    准备工作 1:服务器(本地虚拟安装或是云服务器)这里我使用的是腾讯云服务器 2:PyCharm开发软件 3:XShell 软件 第一步:打开PyCharm如下图新建一个项目 Location:选择代码 ...

  10. docker进阶-初探Docker-compose

    什么是Docker-compose   compose 翻译成中文的意思是"构成"和"组成"的意思.Docker我之前把他比作一个大轮船,这个轮船上面可以放很多 ...