首先简单说一下(以下为一个回答的参考模板)

1、实例化一个Bean--也就是我们常说的new;

2、按照Spring上下文对实例化的Bean进行配置--也就是IOC注入;

3、如果这个Bean已经实现了BeanNameAware接口,会调用它实现的setBeanName(String)方法,此处传递的就是Spring配置文件中Bean的id值

4、如果这个Bean已经实现了BeanFactoryAware接口,会调用它实现的setBeanFactory(setBeanFactory(BeanFactory)传递的是Spring工厂自身(可以用这个方式来获取其它Bean,只需在Spring配置文件中配置一个普通的Bean就可以);

5、如果这个Bean已经实现了ApplicationContextAware接口,会调用setApplicationContext(ApplicationContext)方法,传入Spring上下文(同样这个方式也可以实现步骤4的内容,但比4更好,因为ApplicationContext是BeanFactory的子接口,有更多的实现方法);

6、如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor经常被用作是Bean内容的更改,并且由于这个是在Bean初始化结束时调用那个的方法,也可以被应用于内存或缓存技术;

7、如果Bean在Spring配置文件中配置了init-method属性会自动调用其配置的初始化方法。

8、如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessAfterInitialization(Object obj, String s)方法、;

注:以上工作完成以后就可以应用这个Bean了,那这个Bean是一个Singleton的,所以一般情况下我们调用同一个id的Bean会是在内容地址相同的实例,当然在Spring配置文件中也可以配置非Singleton,这里我们不做赘述。

9、当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接口,会调用那个其实现的destroy()方法;

10、最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法。

结合代码理解一下

1、Bean的定义

Spring通常通过配置文件定义Bean。如:

<?xml version=”1.0″ encoding=”UTF-8″?><beans xmlns=”http://www.springframework.org/schema/beans”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd”><bean id=”HelloWorld” class=”com.pqf.beans.HelloWorld”><property name=”msg”><value>HelloWorld</value></property>
</bean></beans>

这个配置文件就定义了一个标识为 HelloWorld 的Bean。在一个配置文档中可以定义多个Bean。

2、Bean的初始化

有两种方式初始化Bean。

1、在配置文档中通过指定init-method 属性来完成

在Bean的类中实现一个初始化Bean属性的方法,如init(),如:

public class HelloWorld{public String msg=null;public Date date=null;public void init() {msg=”HelloWorld”;date=new Date();}……
}

然后,在配置文件中设置init-mothod属性:

2、实现 org.springframwork.beans.factory.InitializingBean接口

Bean实现InitializingBean接口,并且增加 afterPropertiesSet() 方法:

public class HelloWorld implement InitializingBean {public String msg=null;public Date date=null;public void afterPropertiesSet() {msg="向全世界问好!";date=new Date();}……
}

那么,当这个Bean的所有属性被Spring的BeanFactory设置完后,会自动调用afterPropertiesSet()方法对Bean进行初始化,于是,配置文件就不用指定 init-method属性了。

3、Bean的调用

有三种方式可以得到Bean并进行调用:

1、使用BeanWrapper

HelloWorld hw=new HelloWorld();
BeanWrapper bw=new BeanWrapperImpl(hw);
bw.setPropertyvalue(”msg”,”HelloWorld”);
system.out.println(bw.getPropertyCalue(”msg”));

2、使用BeanFactory

InputStream is=new FileInputStream(”config.xml”);
XmlBeanFactory factory=new XmlBeanFactory(is);
HelloWorld hw=(HelloWorld) factory.getBean(”HelloWorld”);
system.out.println(hw.getMsg());

3、使用ApplicationConttext

ApplicationContext actx=new FleSystemXmlApplicationContext(”config.xml”);
HelloWorld hw=(HelloWorld) actx.getBean(”HelloWorld”);
System.out.println(hw.getMsg());

4、Bean的销毁

1、使用配置文件中的 destory-method 属性

与初始化属性 init-methods类似,在Bean的类中实现一个撤销Bean的方法,然后在配置文件中通过 destory-method指定,那么当bean销毁时,Spring将自动调用指定的销毁方法。

2、实现 org.springframwork.bean.factory.DisposebleBean接口

如果实现了DisposebleBean接口,那么Spring将自动调用bean中的Destory方法进行销毁,所以,Bean中必须提供Destory方法。

图解

再见面试官:你能说说 Spring 框架中 Bean 的生命周期吗?相关推荐

  1. 【面试题】Spring框架中Bean的生命周期

    生命周期 1.实例化一个Bean--也就是我们常说的new一个对象: 2.按照Spring上下文对实例化的Bean进行配置--也就是IOC注入: 3.如果这个Bean已经实现了BeanNameAwar ...

  2. Spring框架中bean的生命周期

    ean在Spring容器中从创建到销毁经历了若干阶段,每一阶段都可以针对Spring如何管理bean进行个性化定制. 正如你所见,在bean准备就绪之前,bean工厂执行了若干启动步骤. 我们对上图进 ...

  3. 阐述Spring框架中Bean的生命周期?

    ① Spring IoC容器找到关于Bean的定义并实例化该Bean. ② Spring IoC容器对Bean进行依赖注入. ③ 如果Bean实现了BeanNameAware接口,则将该Bean的id ...

  4. IoC基础篇(一)--- Spring容器中Bean的生命周期

    IoC基础篇(一)--- Spring容器中Bean的生命周期 日出日落,春去秋来,花随流水,北雁南飞,世间万物皆有生死轮回.从调用XML中的Bean配置信息,到应用到具体实例中,再到销毁,Bean也 ...

  5. 面试问题:Spring中Bean 的生命周期

    Spring Bean生命周期执行流程 在传统的 Java 应用中,Bean 的生命周期很简单,使用关键字 new 实例化 Bean,当不需要该 Bean 时,由 Java 自动进行垃圾回收. Spr ...

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

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

  7. Spring 中 Bean 的生命周期

    本文作者: 伯乐在线 - yemengying 智商捉鸡?,实在没办法一下子理解Spring IoC和AOP的实现原理,看的闹心也不太懂,所以...决定拆成小的不能在小的一个个问题,一点点啃.今天先来 ...

  8. (十)Spring中Bean的生命周期(下)

    Spring官网阅读(十)Spring中Bean的生命周期(下) 在上篇文章中,我们已经对Bean的生命周期做了简单的介绍,主要介绍了整个生命周期中的初始化阶段以及基于容器启动停止时LifeCycle ...

  9. (转)Spring管理的Bean的生命周期

    http://blog.csdn.net/yerenyuan_pku/article/details/52834011 bean的初始化时机 前面讲解了Spring容器管理的bean的作用域.接着我们 ...

最新文章

  1. [Linux]从控制台一次读取一个字符,无需等待回车键
  2. CCF发布2020-2021中国计算机科学技术发展报告
  3. arch linux 下安装 conan permissionError :[Erno 13] Permission denied
  4. 学会使用函数式编程的程序员(第2部分)
  5. SSH暴力破解IP大曝光
  6. 使用 SSH 免密码登录连接远程服务器
  7. Linux下配置和安装VNCServer远程服务
  8. Linux下配置MySQL需要注意的几点
  9. Sql Server系列:视图
  10. sql limit 子句_SQL按子句概述和示例
  11. Python:遍历指定目录下所有的c语言源代码文件
  12. CentOS7安装MySQL及常用指令
  13. 分布式优化和去中心化优化概述
  14. opencv2/opencv.hpp”:No such file or directory 或找不到属性管理器
  15. 微信小程序超级占内存_小程序丨微信小程序占内存大吗?微信小程序消耗流量大吗?...
  16. 基于 Verilog 的经典数字电路设计(3)选择器
  17. 爬虫基础_01——正则
  18. 快速处理-小程序/uniapp,showToast没有效果
  19. Markdown (CSDN) MD编辑器(二)- 文本样式(更改字体、字体大小、字体颜色、加粗、斜体、高亮、删除线)
  20. E500 键盘粘键,倒水滑落键盘

热门文章

  1. 浅谈线程池(中):独立线程池的作用及IO线程池
  2. 专访阿里云萧少聪、曹龙:一家云厂商对入局数据库做了哪些思考?
  3. [JOYOI] 1124 花店橱窗
  4. 科沃斯旺宝与阿里云联合参加通信展
  5. http://blog.csdn.net/java2000_wl/article/details/8627874
  6. 12种超酷HTML5 SVG和CSS3浮动标签效果
  7. java jsp失效问题--待解决
  8. 2016年,新的开始
  9. Linux 学习笔记:批量新增SAMBA用户的脚本
  10. 有关数据结构基础知识(数据结构 严蔚敏版)