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

Spring7指南(三)之Bean的生命周期

项目工程完整地址:https://github.com/YiyiCoding/Spring7Guides

Bean的单例说明

  • 多例Bean( @Scope(“prototype”) )每次都由IOC容器New一个新对象,此处之外跟容器没有太多的联系性

  • 单例才具有生命周期的概念

  • 单例有懒加载的概念:需要时才由IOC容器创建Bean

    只要在类上面或@Bean 上注解@Lazy即可

Bean的生命周期

  1. 实例化(Instantiation)→
  2. 属性填充(Populate)→
  3. 前置初始化(BeanPostProcessor.postProcessBeforeInitialization)→
  4. 初始化(Initialization)→
  5. 后置初始化(BeanPostProcessor.postProcessAfterInitialization)→
  6. 就绪(Ready):【在容器中可用】 →
  7. 销毁前处理(DestructionAwareBeanPostProcessor)→
  8. 销毁(Destruction)

【今天Spring7包含的知识点】:

  • @Lazy

  • Bean的生命周期

  • 构造函数注入

    publicUserService2(OrderServiceorderService){this.orderService=orderService;}
  • 需适配 Jakarta EE 9+

    implementation("jakarta.annotation:jakarta.annotation-api:3.0.0")
  • @PostConstruct

  • @PreDestroy

  • InitializingBean

  • DisposableBean

代码开始

  • 新增依赖,Spring7 要求 Jakarta EE 9+
implementation("jakarta.annotation:jakarta.annotation-api:3.0.0")
  • UserService2,采用构造函数注入
@ServicepublicclassUserService2{privatefinalOrderServiceorderService;publicUserService2(OrderServiceorderService){this.orderService=orderService;}publicvoidtest(){System.out.println(orderService.demo());}}

Bean的生命周期代码LifecycleBean

packagecom.yiyi.coding.spring.ioc.bean;importjakarta.annotation.PostConstruct;importjakarta.annotation.PreDestroy;importorg.springframework.beans.factory.DisposableBean;importorg.springframework.beans.factory.InitializingBean;importorg.springframework.stereotype.Component;@ComponentpublicclassLifecycleBeanimplementsInitializingBean,DisposableBean{// 步骤1:实例化(无代码,容器自动执行)publicLifecycleBean(){System.out.println("【1. 实例化】创建Bean实例");}// 步骤2:属性填充(模拟注入,实际可通过配置注入)privateStringname;publicvoidsetName(Stringname){this.name=name;System.out.println("【2. 属性填充】设置属性name="+name);}// 步骤3:BeanPostProcessor前置处理(需自定义实现)// 步骤4:初始化@PostConstructpublicvoidpostConstruct(){System.out.println("【4.1 初始化】@PostConstruct");}@OverridepublicvoidafterPropertiesSet()throwsException{System.out.println("【4.2 初始化】InitializingBean#afterPropertiesSet");}publicvoidinitMethod(){System.out.println("【4.3 初始化】自定义init-method");}// 步骤5:BeanPostProcessor后置处理(需自定义实现)// 步骤6:就绪(可用)publicvoiddoBusiness(){System.out.println("【6. 就绪】Bean执行业务逻辑");}// 步骤7:销毁前处理(需自定义DestructionAwareBeanPostProcessor)// 步骤8:销毁@PreDestroypublicvoidpreDestroy(){System.out.println("【8.1 销毁】@PreDestroy");}@Overridepublicvoiddestroy(){System.out.println("【8.2 销毁】DisposableBean#destroy");}publicvoiddestroyMethod(){System.out.println("【8.3 销毁】自定义destroy-method");}publicStringgetName(){returnname;}}

运行main函数的测试情况:LifecycleBean 中的某些方法未完全执行,有些需进行配置,如initMethod()等,本次略过。

packagecom.yiyi.coding.spring.ioc;// 测试类importcom.yiyi.coding.spring.ioc.bean.LifecycleBean;importorg.springframework.context.annotation.AnnotationConfigApplicationContext;importorg.springframework.context.annotation.ComponentScan;@ComponentScan("com.yiyi.coding.spring.ioc")publicclassLifecycleTest{staticvoidmain(){// 启动容器AnnotationConfigApplicationContextcontext=newAnnotationConfigApplicationContext(LifecycleTest.class);LifecycleBeanbean=context.getBean(LifecycleBean.class);bean.setName("test");// 手动触发属性填充(模拟容器注入)bean.doBusiness();// 关闭容器(触发销毁)context.close();}}

以下生命周期的钩子已经足够使用。

【1. 实例化】创建Bean实例 【4.1 初始化】@PostConstruct 【4.2 初始化】InitializingBean#afterPropertiesSet 【2. 属性填充】设置属性name=test 【6. 就绪】Bean执行业务逻辑 【8.1 销毁】@PreDestroy 【8.2 销毁】DisposableBean#destroys
http://www.jsqmd.com/news/74169/

相关文章:

  • 腾讯混元语音数字人模型开源落地,三大音乐平台率先应用开启内容创作新纪元
  • Qwen3-4B-Instruct-2507横空出世:以极速响应重构AI内容生产标准,开启轻量化模型实用新纪元
  • 人工智能时代:重塑未来的核心驱动力与发展趋势
  • 微信提现不要手续费了,手把手教会你(建议收藏)
  • AI21 Labs开源五款重磅模型,MoE架构成技术焦点!大模型领域一周动态速览
  • 变分法
  • Wan2.2-T2V-A14B在虚拟数字人视频合成中的前沿应用
  • 批量出图神器CAXA CAD:再多的零件,也能一键搞定工程图
  • Apache和nginx的区别
  • Wan2.2-T2V-A14B在音乐会虚拟舞台设计中的创意应用
  • Wan2.2-T2V-A14B在品牌宣传片自动生成中的实际效果展示
  • Wan2.2-T2V-A14B在AI剧本预演中的分镜自动生成能力验证
  • 仿写文章Prompt:重构B站下载工具使用指南
  • 1136 A Delayed Palindrome
  • Day 35 文件的规范拆分和写法
  • 【Dify 1.7.0多模态RAG音频处理】:揭秘新一代AI语音理解核心技术
  • Wan2.2-T2V-A14B模型在高校数字媒体教学中的引入方案
  • HBase vs. 传统数据库:大数据时代的存储革命
  • Wan2.2-T2V-A14B如何实现季节变换的自然过渡?春去秋来效果演示
  • 【OD刷题笔记】- 分积木
  • 经典算法题详解之游乐园的迷宫(二)
  • 终极解决方案:JetBrains IDE试用期一键重置完整指南
  • 【限时掌握】Docker Scout AI漏洞检测功能全解析,错过再等一年
  • 智能计算模拟:第一性原理+分子动力学+机器学习
  • 阿里达摩院Qwen3-VL多模态模型重磅发布:开启视觉-语言交互新纪元
  • 腾讯混元开源四梯度轻量模型:开启端侧AI普惠新时代
  • VBA-JSON终极指南:快速掌握Excel和Access中的JSON数据处理
  • 重磅发布:Qwen3-VL-8B-Instruct多模态大模型开源,开启智能视觉交互新纪元
  • 第九章: I²C 模块 —— 给你的芯片装上“微信”!
  • Wan2.2-T2V-A14B支持绿幕抠像输出吗?后期合成兼容性探讨