连着两天的面试 ,都问到了 Spring 的Bean的生命周期,其中还包括 昨晚一波阿里的电话面试。这里找到了Spring 实战中的官方说法。希望各位要面试的小伙伴记住,以后有可能,或者是有时间 去看看源码最好(也包括我自己)。哈哈

Bean 的生命周期

  在传统的Java应用中,bean的生命周期很简单。使用Java 关键字 new 进行bean 实例化,然后该 bean 就可以使用了。一旦该bean 不再被使用,则由 java 自动进行垃圾回收。

  相比之下,Spring 容器中的 bean 的生命周期就显得相对复杂多了。正确理解Spring bean 的生命周期非常重要,因为你或许要利用 Spring 提供的扩展点来自定义bean 的创建过程。图1.5展示了  bean 装载到 spring 应用上下文中的一个典型的生命周期过程。(手机拍摄的。。)

注意图中所说:bean 在 Spring 容器中从创建到销毁经历了若干阶段,每一阶段都可以针对 Spring 如何管理 bean 进行个性化定制

正如你所见的,在 bean 准备就绪之前, bean 工厂执行了若干启动步骤。我们对图1.5 进行详细描述:(这里是需要背下来的

1. Spring 对 bean 进行实例化;

2. Spring 将值和 bean 的引用注入到bean 对应的属性中;

3. 如果 bean 实现了 BeanNameAware 接口,Spring 将 bean 的 ID 传递给 setBeanName()方法;

4. 如果 bean 实现了  BeanFactoryAware 接口,Spring 将调用 setBeanFactory ()方法,将 BeanFactory 容器实例传入;

5. 如果 bean 实现了 ApplicationContextAware 接口,Spring 将调用 set-ApplicationContext () 方法,将 bean 所在的应用上下文的引用传入进来;

6. 如果 bean 实现了 BeanPostProcessor 接口,Spring 将调用他们的 post-Process-Before-Initialization () 方法;

7. 如果 bean 实现了 InitializingBean 接口,Spring 将调用它们的 after-Properties-Set () 方法。类似的,如果 bean 使用 init -method 声明了初始化方法,该方法也会被调用;

8. 如果 bean 实现了 BeanPostProcessor 接口, Spring 将调用它们的 post-Process-After-Initialization () 方法;

9. 此时,bean 已经准备就绪,可以被应用程序使用了,它们将一直驻留在应用上下文中,直到该应用上下文被销毁;

10.  如果 bean 实现了 Disposable-Bean 接口,Spring 将调用它的 destory () 接口方法。同样,如果 bean 使用 destory-method 声明了销毁方法,该方法也会被调用。

以上就是书中所说,请牢记,面试中才能从容应对。

Spring Bean的生命周期,《Spring 实战》书中的官方说法的更多相关文章

  1. Spring Bean的生命周期(非常详细)

    Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的.我们通常使用ApplicationContext作为Spring ...

  2. spring bean的生命周期

    掌握好spring bean的生命周期,对spring的扩展大有帮助.  spring bean的生命周期(推荐看)  spring bean的生命周期

  3. Spring Bean的生命周期相关博客

    最近得面试题一直 问 Spring 得生命周期,鉴于自己还未阅读过源码 所以只能是自己 背一波了.属实不懂硬背得作用,但是无奈被各位面试官打败了.等以后有时间了 一定要阅读几遍spring的 源码 有 ...

  4. Spring学习手札(四)谈谈Spring Bean的生命周期及作用域

    在Spring中,那些组成应用程序的主体以及由Spring IoC容器所管理的对象,被称之为Bean.Bean与应用程序中其他对象(比如自己创建类)的区别就是,Bean是由IoC容器创建于销毁的.在S ...

  5. Spring Bean的生命周期详解(转)

    Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的.我们通常使用ApplicationContext作为Spring ...

  6. Spring动态代理及Spring Bean的生命周期

    数组添加值 public class DiTest { /** * 数组 */ private String [] arrays; /** * List:集合 */ private List<I ...

  7. Spring(三)--Spring bean的生命周期

    Spring bean的生命周期 ApplicationContext Bean生命周期流程 1.需要的实体类 ackage com.xdf.bean; import org.springframew ...

  8. spring bean的生命周期与作用域

    bean的作用域 singleton:单例模式,Spring IoC容器中只会存在一个共享的Bean实例,无论有多少个Bean引用它,始终指向同一对象. prototype:原型模式,每次通过Spri ...

  9. 第37讲 谈谈Spring Bean的生命周期和作用域

    在企业应用软件开发中,Java 是毫无争议的主流语言,开放的 Java EE 规范和强大的开源框架功不可没,其中 Spring 毫无疑问已经成为企业软件开发的事实标准之一.今天这一讲,我将补充 Spr ...

随机推荐

  1. jQuery-事件命名空间

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  2. JSTL配置文件下载地址

    Apache Tomcat安装JSTL 库步骤如下: 从Apache的标准标签库中下载的二进包(jakarta-taglibs-standard-current.zip). 官方下载地址:http:/ ...

  3. C实现动态进度条

    #include <iostream> #include <windows.h> void HideCursor() { CONSOLE_CURSOR_INFO cursor_ ...

  4. KVM虚拟机配置笔记

    KVM 全称是 Kernel-Based Virtual Machine.也就是说 KVM 是基于 Linux 内核实现的,KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存. 在 ...

  5. 设置HttponlyCookie解决mshtml编程无法获取验证码图片流

    最近给客户做的项目有一个新需求,客户需要在打开的IE浏览器中做自动登录,登录的页面上有神兽验证码.解决验证码的方案是找第三方平台打码.这样就有一个问题,如何把正确的验证码传给第三方打码平台. 大家都知 ...

  6. 一次非常有趣的 SQL 优化经历

    阅读本文大概需要 6 分钟. 前言 在网上刷到一篇数据库优化的文章,自己也来研究一波. 场景 数据库版本:5.7.25 ,运行在虚拟机中. 课程表 #课程表 create table Course( ...

  7. 第81节:Java中的数组

    第81节:Java中的数组 本节介绍数组的基本概念,数据就是一种数据结构,可以用来存储多个数据,每个数组中可以存放相同类型的数据.比如,在学校,我们是一个班,这里的班级中每个同学都是这个班级数组中的元 ...

  8. 原生JS-旋转木马

    原生JS-旋转木马 今天写一个原生JS写的旋转木马JS效果. 实现原理: 1.建立一个数组给每一张图片写对应的z-index,opacity,top,width: 2.实现旋转的操作是把建造的数组里面 ...

  9. Spring整合MyBatis 你get了吗?

    Spring整合MyBatis 1.整体架构dao,entity,service,servlet,xml 2..引入依赖 <dependencies> <dependency> ...

  10. python中 __init__.py的例程

    __init__.py一般是为空,用在一个python目录中,标识该目录是一个python的模块包 先上来看一个例子: .: test1 test2 test_init.py ./test1: tim ...