Spring Bean 的生命周期简单易懂。在一个 bean 实例被初始化时,需要执行一系列的初始化操作以达到可用的状态。同样的,当一个 bean 不再被调用时需要进行相关的析构操作,并从 bean 容器中移除。

Spring bean factory 负责管理在 spring 容器中被创建的 bean 的生命周期。Bean 的生命周期由两组回调(call back)方法组成。

初始化之后调用的回调方法。

销毁之前调用的回调方法。

Spring 框架提供了以下四种方式来管理 bean 的生命周期事件:

InitializingBean 和 DisposableBean 回调接口

针对特殊行为的其他 Aware 接口

Bean 配置文件中的 Custom init () 方法和 destroy () 方法

@PostConstruct 和 @PreDestroy 注解方式

Bean 的生命周期可以表达为:Bean 的定义 ——Bean 的初始化 ——Bean 的使用 ——Bean 的销毁

初始化回调

org.springframework.beans.factory.InitializingBean 接口指定一个单一的方法:

void afterPropertiesSet() throws Exception;
复制代码

因此,你可以简单地实现上述接口和初始化工作可以在 afterPropertiesSet () 方法中执行,如下所示:

public class ExampleBean implements InitializingBean {
public void afterPropertiesSet() {
// do some initialization work
}
}
复制代码

在基于 XML 的配置元数据的情况下,你可以使用 init-method 属性来指定带有 void 无参数方法的名称。例如:

<bean id="exampleBean"
class="examples.ExampleBean" init-method="init"/>
复制代码

下面是类的定义:

public class ExampleBean {
public void init() {
// do some initialization work
}
}
复制代码

销毁回调

org.springframework.beans.factory.DisposableBean 接口指定一个单一的方法:

void destroy() throws Exception;
复制代码

因此,你可以简单地实现上述接口并且结束工作可以在 destroy () 方法中执行,如下所示:

public class ExampleBean implements DisposableBean {
public void destroy() {
// do some destruction work
}
}
复制代码

在基于 XML 的配置元数据的情况下,你可以使用 destroy-method 属性来指定带有 void 无参数方法的名称。例如:

<bean id="exampleBean"
class="examples.ExampleBean" destroy-method="destroy"/>
复制代码

下面是类的定义:

public class ExampleBean {
public void destroy() {
// do some destruction work
}
}
复制代码

如果你在非 web 应用程序环境中使用 Spring 的 IoC 容器;例如在丰富的客户端桌面环境中;那么在 JVM 中你要注册关闭 hook。这样做可以确保正常关闭,为了让所有的资源都被释放,可以在单个 beans 上调用 destroy 方法。

建议你不要使用 InitializingBean 或者 DisposableBean 的回调方法,因为 XML 配置在命名方法上提供了极大的灵活性。

Spring Bean 的生命周期(详细解读)的更多相关文章

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

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

  2. Spring Bean的生命周期,《Spring 实战》书中的官方说法

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

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

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

  4. Spring原理系列一:Spring Bean的生命周期

    一.前言 在日常开发中,spring极大地简化了我们日常的开发工作.spring为我们管理好bean, 我们拿来就用.但是我们不应该只停留在使用层面,深究spring内部的原理,才能在使用时融汇贯通. ...

  5. spring bean的生命周期

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 从零搭建php环境-php8-扩展-redis

    一.下载1.https://pecl.php.net/get/redis-5.3.2.tgz下载到本地,文件传输上传到 /usr/local/src/2.wget -P /usr/local/src/ ...

  2. echarts 画图报错 this.dom.getContext is not a function

    我给 <el-card>绑定了ref,利用$refs获取 echarts实例  const echarts1 = echarts.init(this.$refs.echarts1); 结果 ...

  3. Control M 复习笔记

    记录一些复习过程想通的知识点 1.我们教案中看到的图基本都是复平面,从来没有看到过所谓s域或z域,不同的稳定区域只是因为从复平面到函数中存在不同的映射过程(s函数和z函数). s函数是纯粹的频域,也就 ...

  4. Linux查看进程调用接口跟踪命令strace

    sudo strace -f -p 9022 -e connect

  5. 英国延长 UKCA 标记截止日期

    政府于 2022 年 11 月 14 日宣布,企业将有 2 年的时间来应用新的 UKCA 产品标记.在 2024 年 12 月 31 日之前,企业可以选择使用 UKCA 或 CE 标志,之后企业只能使 ...

  6. centeros忘记root登录密码

    转载自:https://www.cnblogs.com/dongml/p/10333819.html 很多时候我们都会忘记Linux root 用户的口令,下面就教大家如果忘记root口令怎么办 第1 ...

  7. Nginx 监听同一端口号配置多个域名

    同一台nginx服务器通过配置多个server块实现在同一端口号下监听多个域名. 需要注意的是:端口号(listen)+主机名(server_name) 需要在多个server中唯一,否则会报错. 实 ...

  8. 基础实验之访问控制列表ACL应用

     要求: 1,PC1,PC2,PC3互通 2,配置ACL限制PC2不能访问PC3 1,首先规划好IP,配置如上图 SW2配置 # vlan batch 10 20 # interface Vlanif ...

  9. ajax高级(请求服务器脚本,数据库, ajxa xml文件)

    请求jsp与请求普通文件不通过的地方,请求jsp可能会传参,比如搜索,用户名,页码这些 html部分:<input type="text" id="txt1&quo ...

  10. Vue修改

    今天做的是一个Vue的修改操作: Vue主要是用来做视图来显示数据的,理解起来的话可能比较困难,学了好几天了,才刚摸到一点头绪,还是需要努力