java——Spring中Bean生命周期(代码测试)

Bean的生命周期是指Bean在Spring容器中的创建、存活以及销毁的整个过程。这个过程可以分为多个阶段,每个阶段都有其特定的任务和操作。以下是Bean生命周期的详细解释:

一、Bean生命周期的主要阶段

  1. Bean元信息配置阶段

    • 此阶段主要是配置Bean的元信息,包括Bean的定义、属性、依赖等。这些信息可以通过XML文件、注解、Java配置类等方式进行定义。
  2. Bean元信息解析阶段

    • Spring容器启动后,会解析配置文件中定义的Bean元信息,将其转换成Spring内部的BeanDefinition结构。BeanDefinition包含了Bean的各种定义信息,如类名、作用域、是否延迟初始化、依赖的Bean等
  3. 将Bean注册到容器中

    • 解析完Bean元信息后,Spring容器会将BeanDefinition注册到容器中,以便后续进行实例化、初始化等操作。
  4. BeanDefinition合并阶段

    • 对于存在多个BeanDefinition的情况,Spring容器会进行合并处理,以确保最终只有一个有效的BeanDefinition
  5. Bean Class加载阶段

    • 在实例化Bean之前,Spring容器会加载Bean的类定义。这一步是通过Java的类加载机制完成的。
  6. Bean实例化阶段

    • 此阶段Spring容器会根据BeanDefinition中的类名信息,使用反射机制创建Bean的实例。对于单例Bean,容器在启动时就会进行实例化;而对于多例Bean,则是在每次请求时才会进行实例化。
    • 三级缓存处理:在实例化过程中,Spring会使用三级缓存来管理Bean的创建状态。这有助于解决Bean之间的循环依赖问题java——Spring 中循环依赖 三级缓存_synchronized(this.singletonobjects) {-CSDN博客
  7. 属性赋值阶段

    • 实例化完成后,Spring容器会
### Spring Bean 生命周期概述 Spring 容器管理着应用程序中各个组件的创建、配置和生命周期Bean生命周期是指从实例化到销毁所经历的一系列事件。 #### 准备阶段 在实际加载 Bean 之前,容器会先获取并解析配置文件中的相关信息[^1]。此期间主要涉及读取诸如 `init-method` 和 `destroy-method` 这样的属性设置,它们分别指定了初始化和销毁时要调用的方法名;还有像 `BeanFactoryPostProcessor` 接口这样的工具类,在 Bean 实例被创建前后提供了额外的操作机会,这有助于实现更灵活的应用逻辑控制或与其他技术栈(如 Dubbo)无缝对接。 #### 创建实例阶段 当准备工作完成后便进入了真正的对象构建环节——即通过反射机制根据 Class 类型生成新的实体,并为其成员变量赋予默认值或其他依赖注入项。此时如果存在工厂方法,则优先采用该方式完成最终形态的确立工作[^2]。 #### 初始化阶段 一旦基础结构搭建完毕,紧接着就是一系列旨在确保新加入者能够正常运作而设计好的启动流程: - **@PostConstruct 注解**:标记了某个特定函数作为首次访问前必经之路; - **InitializingBean 接口**:实现了 afterPropertiesSet 方法的对象会在所有必要参数填充之后自动触发相应行为; - **自定义 init 方法**:由外部显式指定用于执行任意复杂度较高的预处理任务[^3]。 值得注意的是官方文档建议尽量避免让业务代码直接继承 InitializingBean 或 DisposableBean 等抽象基类,转而利用 XML/Annotation 中更为直观简便的方式达成相同目的。 #### 销毁阶段 最后一步则是清理资源释放内存空间的过程,同样支持多种途径来定制结束动作,比如借助于 `@PreDestroy` 装饰符或是遵循传统做法重写父级提供的 shutdown hook 来达到优雅退出的效果。 ```java // 使用 @PostConstruct 和 @PreDestroy 示例 import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; public class MyService { private String message; public void setMessage(String msg){ this.message=msg; } // 构造函数省略... @PostConstruct public void initialize(){ System.out.println("@PostConstruct: " + message); } @PreDestroy public void cleanup(){ System.out.println("@PreDestroy"); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值