掘金 后端 ( ) • 2024-05-05 16:58

Bean的生命周期:从创建到销毁的全过程

Spring管理的Bean具有完整的生命周期,这个生命周期从创建开始,到填充属性,初始化,使用,销毁最后到清除。下面详细解释每个阶段:

  1. 创建(Creation) :这是Bean生命周期的开始阶段。Spring容器根据配置创建Bean的实例。
  2. 填充属性(Population of bean properties) :在这个阶段,Spring容器将配置中定义的属性值注入到Bean中。这包括字段注入、构造器注入、Setter方法注入等。
  3. 初始化(Initialization) :在初始化阶段,容器会调用Bean的初始化方法(init-method指定的方法)。这个阶段是Bean准备就绪使用的前一个阶段。
  4. 使用(Usage) :应用程序开始使用这个Bean。Bean现在可以处理请求并执行其业务逻辑。
  5. 销毁(Destruction) :当Bean不再需要时,容器会进行清理工作。对于单例Bean,这个阶段发生在容器关闭时。对于原型Bean,这个阶段发生在每次Bean被销毁时。
  6. 清除(Disposal) :这是Bean生命周期的最后一个阶段。在这个阶段,容器会执行清理工作,比如调用Bean的销毁方法(destroy-method指定的方法)。

代码示例:

// MyBean.java
public class MyBean {
    private String message;
    // 依赖注入
    public MyBean(String message) {
        this.message = message;
    }
    // 初始化方法
    public void init() {
        System.out.println("MyBean initialized");
    }
    // 销毁方法
    public void destroy() {
        System.out.println("MyBean destroyed");
    }
    // Bean的使用方法
    public void showMessage() {
        System.out.println(message);
    }
}
// AppConfig.java
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
    @Bean(initMethod = "init", destroyMethod = "destroy")
    public MyBean myBean() {
        return new MyBean("Hello, World!");
    }
}
// MainApp.java
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class MainApp {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        MyBean myBean = context.getBean(MyBean.class);
        myBean.showMessage(); // 输出: Hello, World!
        // 当应用程序关闭时,会调用myBean的destroy方法
    }
}

在这个例子中,MyBean类具有一个初始化方法init和一个销毁方法destroy

AppConfig类中,我们使用@Bean注解来定义MyBean,并指定initMethoddestroyMethod

MainApp类中,我们使用ApplicationContext来获取MyBean的实例,并调用其showMessage方法。当应用程序关闭时,MyBeandestroy方法会被调用。


AI时代的游轮已经到来

如果你觉得开发过程中存在重复性工作,效率不够高。

不妨看看影子的AI+编程玩法,涵盖了Java | AI+编程的学习资料,助力每一位编程人员提高效率,无论你是在校学生或是工作者,都应为未来的AIG时代做准备。

赚到啦!满满的AI+编程学习资源,AI与编程资料分享! - 掘金 (juejin.cn)