当前位置: 首页 > news >正文

spring生命周期

1、spring生命周期

Spring框架中的bean生命周期指的是从创建到销毁的整个过程。以下是Spring Bean生命周期的主要阶段:

  1. 实例化Bean

    • 在Spring Boot中,Bean通常是通过注解@Component@Service@Repository@Controller来声明的。
  2. 属性赋值(依赖注入)

    • 通过注解@Autowired@Inject@Resource来实现自动装配。
  3. BeanNameAware接口

    • 如果需要,可以通过实现BeanNameAware接口并使用@PostConstruct注解来获取Bean名称。
  4. BeanFactoryPostProcessor和BeanPostProcessor接口

    • 可以通过实现这些接口并使用@Configuration注解来创建配置类,然后在其中定义相应的postProcessor Bean。
  5. InitializingBean接口和init-method

    • 实现InitializingBean接口,并重写afterPropertiesSet方法。
    • 或者使用@PostConstruct注解在Bean的字段或方法上来指定初始化逻辑。
  6. 使用Bean

    • Bean初始化完成后,就可以在应用程序中使用了。
  7. DisposableBean接口和destroy-method

    • 实现DisposableBean接口,并重写destroy方法。
    • 或者使用@PreDestroy注解在Bean的字段或方法上来指定销毁逻辑。

2、spring boot代码实现

package com.ybw.service;import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;/*** 生命周期测试** @author ybw* @version V1.0* @className LifeCycle* @date 2024/11/4**/
@Component
@Slf4j
public class LifeCycleService {/*** Bean初始化后执行的方法*/@PostConstructpublic void init() {log.info("Bean初始化后执行的方法");}/*** 测试方法** @methodName: sayHello* @return: void* @author: ybw* @date: 2024/11/4**/public void sayHello() {log.info("Hello World");}/*** Bean销毁前执行的方法*/@PreDestroypublic void destroy() {log.info("Bean销毁前执行的方法");}
}

        在Spring Boot中,通常不需要显式定义init-methoddestroy-method,因为@PostConstruct@PreDestroy注解已经提供了相同的功能。此外,Spring Boot通过自动配置和组件扫描简化了许多配置,使得开发者可以更专注于业务逻辑的实现。

日志如下:

[INFO ] 2024-11-04 14:10:19.703 [main] com.ybw.service.LifeCycleService - Bean初始化后执行的方法
[INFO ] 2024-11-04 14:10:20.584 [main] c.ybw.service.LifeCycleServiceTest - Started LifeCycleServiceTest in 2.239 seconds (process running for 4.553)
[INFO ] 2024-11-04 14:10:21.691 [main] com.ybw.service.LifeCycleService - Hello World
[INFO ] 2024-11-04 14:10:21.717 [SpringApplicationShutdownHook] com.ybw.service.LifeCycleService - Bean销毁前执行的方法


http://www.mrgr.cn/news/65376.html

相关文章:

  • 使用 `Celery` 配合 `RabbitMQ` 作为消息代理,实现异步任务的调度、重试、定时任务以及错误监控等功能
  • SpringBoot+Shiro权限管理
  • git 删除远程不存在本地命令却能看到的分支
  • 天生倔强脸的白纸新人,徐畅演艺生涯初舞台获得肯定!
  • 15. 文件操作
  • RT-Thread学习
  • 机场网约车智能出行可以选择不同车型吗?
  • 使用onnxruntime c++ API实现yolov5m视频检测
  • 在日本工作的企业文化与国内有什么不同?
  • 【美国非农数据与美联储降息之间的关系】
  • 电机用电工钢:取向硅钢片与无取向硅钢片的区别
  • 关于我、重生到500年前凭借C语言改变世界科技vlog.14——常见C语言算法
  • 告别AI焦虑,普通人快速上手用好AI大模型的3个关键能力
  • ruoyi若依vue分离版前端资源打包到jar中
  • Nop入门: 动态SQL管理
  • 【小心!parallel方法没那么简单】
  • 为什么在VK上打广告要找代理商
  • Supervisor:掌控进程,释放潜能
  • 【自动化利器】12个评估大语言模型(LLM)质量的自动化框架
  • 全新更新!FastReport .NET Delphi 和 Lazarus 产品更新至版本 2025.1
  • 国富氢能预计亏损持续扩大:毛利率下滑严重,净负债比率飙升
  • MBox20工业物联网智能网关:匠心技术引领工业自动化新高度
  • Dev-C++简介
  • 数据结构之二叉树前序,中序,后序习题分析(递归图)
  • 【动手学电机驱动】 STM32-FOC(1)STM32 电机控制的软件开发环境
  • WPF使用Prism框架首页界面