0
点赞
收藏
分享

微信扫一扫

Spring注解:自定义Bean的初始化和销毁

彪悍的鼹鼠 2021-10-15 阅读 69
技术分享
自定义Bean的初始化和销毁

Bean的生命周期包含创建、初始化和销毁等。Spring管理Bean的生命周期,当到达初始化和销毁阶段的时候,调用我们自己定义的初始化和销毁方法。

public class Student {

    public Student() {
        System.out.println("Student 构造器");
    }

    public void init() {
        System.out.println("Student 初始化");
    }

    public void destroy() {
        System.out.println("Student 销毁");
    }
}
@Configuration
public class BeanMainConfig {

    @Bean
    public Student student() {
        return new Student();
    }
}

测试

@Test
public void testLifeCycle() {
    AnnotationConfigApplicationContext applicationContext =
            new AnnotationConfigApplicationContext(BeanMainConfig.class);
    System.out.println("容器创建完成");
}
Student 构造器
容器创建完成

默认是单实例的Bean,在容器启动的时候,就会调用构造器方法创建对象。

在Student中,创建了init和destroy方法,如何将其添加到Spring管理Bean的生命周期中执行呢?其实和以前用xml配置的方式差不多,只要在@Bean中添加指定初始化和销毁的方法即可。

@Bean(initMethod = "init", destroyMethod = "destroy")

测试

Student 构造器
Student 初始化
容器创建完成

容器在启动的时候,先会去调用构造器方法创建对象,然后初始化该对象,放入到容器中,此时容器创建完成。但是并没有调用销毁方法,那是因为容器没有关闭,Bean也会存在。

@Test
public void testLifeCycle() {
    AnnotationConfigApplicationContext applicationContext =
            new AnnotationConfigApplicationContext(BeanMainConfig.class);
    System.out.println("容器创建完成");
    //关闭容器
    applicationContext.close();
}
Student 构造器
Student 初始化
容器创建完成
Student 销毁

在容器关闭的时候,调用销毁方法。这样,在整个Spring管理Bean的生命周期的过程中,就可以自定义初始化和销毁方法。

上面这种是针对于单实例的Bean而言,如果是多实例的Bean,那会是如何呢?

@Configuration
public class BeanMainConfig {

    @Scope("prototype")
    @Bean(initMethod = "init", destroyMethod = "destroy")
    public Student student() {
        return new Student();
    }
}
@Test
public void testLifeCycle() {
    AnnotationConfigApplicationContext applicationContext =
            new AnnotationConfigApplicationContext(BeanMainConfig.class);
    System.out.println("容器创建完成");
    Object student = applicationContext.getBean("student");
    Object student2 = applicationContext.getBean("student");
    //关闭容器
    applicationContext.close();
}

测试

容器创建完成
Student 构造器
Student 初始化
Student 构造器
Student 初始化

总结:

  • 构造器(创建对象)
    单实例:在容器启动的时候创建对象
    多实例:在每次获取的时候创建对象
  • 初始化
    对象创建完成,并赋值完成,调用初始化方法
  • 销毁
    单实例:在容器关闭的时候,调用销毁方法
    多实例:容器不会管理这个Bean的销毁,不会调用销毁方法
举报

相关推荐

0 条评论