首页 > 其他分享 >Spring Bean 的生命周期(详细解读)

Spring Bean 的生命周期(详细解读)

时间:2022-11-18 15:11:40浏览次数:47  
标签:生命周期 Spring void bean Bean destroy public

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,void,bean,Bean,destroy,public
From: https://www.cnblogs.com/qian-fen/p/16903288.html

相关文章

  • 关于数据校验Bean Validation的学习
    1,导相关依赖2,常用的Validation注解@NotNull: 标记字段不能为 null@NotEmpty: 标记集合字段不为空(至少要有一个元素)@NotBlank: 标记字段串字段不能是空字符串(即它必......
  • Spring 框架的核心技术(五)
    5.6.选择要使用的AOP声明样式一旦你确定一个方面是实现给定的最佳方法要求,您如何决定在使用SpringAOP或AspectJ之间以及在方面语言(代码)样式,@AspectJ注释样式,还是Sprin......
  • springboot配置项
    该文档主要描述,在springboot项目下相关的一些配置项的使用记录及说明1、日志文件配置项对应的配置项就是:logging.file=./logs/xxx.log表示这个服务的日志要输出到......
  • SpringBoot使用ServletFileUpload上传文件时servletFileUpload.parseRequest(request)
    1.问题描述1.1SpringBoot使用ServletFileUpload上传文件时List<FileItem>items=servletFileUpload.parseRequest(request)为空//获取ServletFileUploadServletF......
  • Springboot项目java -jar 启动jar包参数详解
    Windows1、指定端口java-jarspringboot.jar--server.port=81812、指定配置文件java-jarspringboot.jar--spring.profiles.active=dev3、同时指定端口与配置文件ja......
  • Spring Cloud Circuit Breaker 使用示例
    SpringCloudCircuitBreaker使用示例作者:Grey原文地址:博客园:SpringCloudCircuitBreaker使用示例CSDN:SpringCloudCircuitBreaker使用示例说明SpringClo......
  • spring-security 跨域配置
    跨域问题是实际应用开发中一个非常常见的需求,在Spring框架中对于跨域问题的处理方案有好几种,引入了SpringSecurity之后,跨域问题的处理方案又增加了。1.什么是CORSCORS(C......
  • SpringMVC 拦截异常Exception返回Json,适合Java做后台业务项目
    publicclassExceptionHandlerimplementsHandlerExceptionResolver{@OverridepublicModelAndViewresolveException(HttpServletRequestreque......
  • 用SpringBoot 实现断点续传 (HTTP)
    ​ 前言文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好......
  • 如何用idea新建一个Spring web项目
    如何用idea新建一个Springweb项目首先要下好maven,tomcat,idea,jdk等开发工具一、新建一个工程1、打开idea,选择File->New->project2、选择一个空项目,点击next,给项......