返回

Spring Bean 生命周期的起承转合

后端

前言

上一节我们简单了解了一下 BeanFactory 是什么。简单来说,他就是一个容器,跟普通的容器没有什么区别。这一节,我们从 bean 的基本创建过程出发,看一下 spring 的怎么把我们的 bean 加载到容器里,又是如何把它们拿出来使用的。Spring Bean 是 Spring 框架的核心概念,它本质上是一个对象。

Bean 的注册

在 Spring 中,bean 的注册是一个非常重要的步骤。它告诉 Spring 容器哪些类应该被实例化并管理。bean 可以通过多种方式注册到 Spring 容器中,最常见的方式是通过 XML 配置文件或 Java 配置类。

在 XML 配置文件中,bean 可以通过 <bean> 元素注册。例如,以下 XML 配置文件片段注册了一个名为 "myBean" 的 bean:

<bean id="myBean" class="com.example.MyBean" />

在 Java 配置类中,bean 可以通过 @Bean 注解注册。例如,以下 Java 配置类注册了一个名为 "myBean" 的 bean:

@Configuration
public class MyConfiguration {

    @Bean
    public MyBean myBean() {
        return new MyBean();
    }

}

无论使用哪种方式注册 bean,最终都会导致一个 BeanDefinition 对象的创建。BeanDefinition 对象包含了有关 bean 的所有元数据,包括 bean 的类名、作用域、依赖关系等。

Bean 的获取

一旦 bean 被注册到 Spring 容器中,就可以通过 Spring 的 ApplicationContext 接口来获取它们。ApplicationContext 接口提供了多种方法来获取 bean,最常见的方法是使用 getBean() 方法。例如,以下代码片段从 Spring 容器中获取了一个名为 "myBean" 的 bean:

MyBean myBean = (MyBean) applicationContext.getBean("myBean");

getBean() 方法还可以接受一个 class 对象作为参数,以便指定要获取的 bean 的类型。例如,以下代码片段从 Spring 容器中获取了一个类型为 MyBean 的 bean:

MyBean myBean = applicationContext.getBean(MyBean.class);

Bean 的生命周期

Spring Bean 的生命周期分为以下几个阶段:

  1. 创建 :在 bean 被注册到 Spring 容器后,Spring 容器会创建一个 bean 的实例。
  2. 属性设置 :在 bean 被创建后,Spring 容器会设置 bean 的属性值。
  3. 初始化 :在 bean 的属性值被设置后,Spring 容器会调用 bean 的 afterPropertiesSet() 方法,对 bean 进行初始化。
  4. 使用 :在 bean 初始化后,就可以在应用程序中使用它了。
  5. 销毁 :当 bean 不再被使用时,Spring 容器会调用 bean 的 destroy() 方法,销毁 bean。

在 Spring Bean 的生命周期中,还有一些其他重要的事件,比如 bean 的依赖注入、bean 的作用域等。这些事件将在后面的文章中详细介绍。

总结

Spring Bean 的生命周期是一个非常重要的概念,它有助于理解 Spring 是如何管理和使用 bean 的。在本文中,我们深入探讨了 Spring Bean 的生命周期,从创建到销毁,并讨论了在每个阶段中发生的关键事件。通过了解 Spring Bean 的生命周期,我们可以更好地理解 Spring 框架的工作原理,并能够在开发中更好地利用 Spring Bean。