我们可以自定义bean的初始化和销毁方法,这里所指的的初始化和bean的构造不同,初始化是在bean构造完成后,对bean内部的属性或一些逻辑进行初始化。

首先要弄清一些概念:

  1. 构造(对象创建)    
    1. 单实例:在容器启动时创建对象
    2. 多实例:在每次获取的时候创建对象
  2. 初始化:在对象创建后调用
  3. 销毁:
    1. 单实例:在容器关闭时执行销毁方法
    2. 多实例:容器不会管理,不会调用销毁方法

下面提供几种方法供参考:

一、指定初始化和销毁方法

  在配置类中,我们可以通过@Bean指定initMethod 和destroyMethod ,分别指向类中的初始化和销毁方法。

二、实现InitializingBean和DisposableBean

  实现接口中的InitializingBean(定义初始化逻辑)和destroy(定义销毁逻辑)方法即可。

三、通过@PostConstruct和@PreDestroy注解

  在初始化和销毁方法上分别添加@PostConstruct和@PreDestroy注解,这样就能给Bean实现初始化和销毁。

四、实现后置处理器BeanPostProcessor接口

这里的两个方法postProcessBeforeInitialization和postProcessAfterInitialization,分别会在初始化前和初始化后执行。

实现逻辑:

BeanFactory在创建bean时,会先调用initializeBean方法进行初始化,并在初始化前获取到所有后置处理器,并执行后置处理器的postProcessBeforeInitialization方法。

执行完所有后置处理器的postProcessBeforeInitialization方法后,接着BeanFactory将执行完初始化。

初始化完成后,继续获取所有的后置处理器,循环执行所有的postProcessAfterInitialization方法。


方法三的实现逻辑也是通过后置处理器来完成的。

在执行postProcessBeforeInitialization时,会扫描标注有@PostConstruct注解的方法的类,最终定位到对应方法并执行。

Spring——管理Bean的生命周期的更多相关文章

  1. Spring管理bean的生命周期

    1: bean的创建:   如果我们默认的scope配置为Singleton的话, bean的创建实在Spring容器创建的时候创建: 如果scope的配置为Prototype的话,bena的创建是在 ...

  2. 深究Spring中Bean的生命周期

    前言 这其实是一道面试题,是我在面试百度的时候被问到的,当时没有答出来(因为自己真的很菜),后来在网上寻找答案,看到也是一头雾水,直到看到了<Spring in action>这本书,书上 ...

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

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

  4. Spring4.0学习笔记(5) —— 管理bean的生命周期

    Spring IOC 容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行定制的任务 Spring IOC 容器对Bean的生命周期进行管理的过程: 1.通过构造器或工厂方法 ...

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

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

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

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

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

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

  8. Spring中bean的生命周期!

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

  9. Spring的Bean的生命周期以及Bean的后置处理器

    Bean的生命周期: Spring IOC 容器可以管理 Bean 的生命周期, Spring 允许在 Bean 生命周期的特定点执行定制的任务. Spring IOC 容器对 Bean 的生命周期进 ...

随机推荐

  1. 【转】常见Java面试题 – 第四部分:迭代(iteration)和递归(recursion)

    ImportNew注: 本文是ImportNew编译整理的Java面试题系列文章之一.你可以从这里查看全部的Java面试系列. Q.请写一段代码来计算给定文本内字符“A”的个数.分别用迭代和递归两种方 ...

  2. 原生javascript实现选项卡(基础版)

    一.实现原理 1.主要运用“排他思想”,在设置当前元素前,先把相应元素恢复到默认状态 2.给相应元素添加下标的应用 二.代码展示 <!DOCTYPE html> <html> ...

  3. 更加清晰的TFRecord格式数据生成及读取

    TFRecords 格式数据文件处理流程 TFRecords 文件包含了 tf.train.Example 协议缓冲区(protocol buffer),协议缓冲区包含了特征 Features.Ten ...

  4. 浏览器从输入url 到页面展示完成响应过程

    用户从输入 url 到浏览器响应,呈现给用户的具体过程 1.用户在输入栏输入地址 (1) 如果有 beforeunload 事件会先执行判断继续还是跳出操作 (2) 浏览器进程识别是 地址还是关键字检 ...

  5. Java8 新特性(三) - 日期时间对象以及一些其他特性

    日期时间对象 关于日期时间的操作可以分为两种: 转换:与字符串的互相转换,与时间戳的互相转换 计算:计算两个时间点之间的间隔.时间点与时间段的计算(计算下周N.下个月D日.去年M月D日等等) Java ...

  6. kubernetes concepts -- Replication Controller

    Edit This Page ReplicationController NOTE: A Deployment that configures a ReplicaSet is now the reco ...

  7. Activiti 手工任务(manualTask)

    Activiti 手工任务(manualTask) 作者:Jesai 前言: 手工任务就是一个自动执行的过程.手动任务几乎不在程序中做什么事情,只是在流程的历史中留下一点痕迹,表明流程是走过某些节点的 ...

  8. Java单体应用 - Markdown - 03.高级技巧

    原文地址:http://www.work100.net/training/monolithic-markdown-advance.html 更多教程:光束云 - 免费课程 高级技巧 序号 文内章节 视 ...

  9. 我的第一个 Kaggle 比赛学习 - Titanic

    背景 Titanic: Machine Learning from Disaster - Kaggle 2 年前就被推荐照着这个比赛做一下,结果我打开这个页面便蒙了,完全不知道该如何下手. 两年后,再 ...

  10. 多个github账号时,本地配置ssh-key

    由于需要,申请了多个github账号,但是都是在同一台电脑上操作,原来只有一个账号进行ssh操作时,推送没有遇到什么问题,现在有多个账号了,推送的时候就有点懵逼了,下面是根据网上的资料来进行多个账号, ...