美文网首页
Bean 的初始化方法和销毁方法

Bean 的初始化方法和销毁方法

作者: 尘埃里的玄 | 来源:发表于2021-04-01 15:04 被阅读0次

1: 什么是 bean 的生命周期

bean 的创建----->初始化----->销毁方法 由容器管理 Bean 的生命周期,我们可以通过自己指定 bean 的初始化方法和 bean 的销毁方法

@Configuration public class MainConfig { 
//指定了 bean 的生命周期的初始化方法和销毁方法. 
@Bean(initMethod = "init",destroyMethod = "destroy") 
public Car car() { 
        return new Car(); 
}
 }
  • 针对单实例 bean 的话,容器启动的时候,bean 的对象就创建了,而且容器销毁的时候,也会调用 Bean 的销毁方法。
  • 针对多实例 bean 的话,容器启动的时候,bean 是不会被创建的而是在获取 bean 的时候被创建,而且 bean 的销毁不受 IOC 容器的管理。

2: 通过 InitializingBean 和 DisposableBean 的二个接口实现

@Component
public class Person implements InitializingBean, DisposableBean {
    public Person() {
        System.out.println("Person 的构造方法");
    }

    @Override
    public void destroy() throws Exception {
        System.out.println("DisposableBean 的 destroy()方法 ");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("InitializingBean 的 afterPropertiesSet 方法");
    }
}

3: 通过 JSR250 规范提供的注解@PostConstruct 和@ProDestory 标 注的方法

@Component
public class Book {
    public Book() {
        System.out.println("book 的构造方法");
    }

    @PostConstruct
    public void init() {
        System.out.println("book 的 PostConstruct 标志的方法");
    }

    @PreDestroy
    public void destory() {
        System.out.println("book 的 PreDestory 标注的方法");
    }
}

4: 通过 Spring 的 BeanPostProcessor 的 bean 的后置处理器会拦截 所有 bean 创建过程

  • postProcessBeforeInitialization 在 init 方法之前调用
  • postProcessAfterInitialization 在 init 方法之后调用@Component
public class TestBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("TestBeanPostProcessor...postProcessBeforeInitialization:" + beanName);
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("TestBeanPostProcessor...postProcessAfterInitialization:" + beanName);
        return bean;
    }
}

BeanPostProcessor 的执行时机


image.png

相关文章

网友评论

      本文标题:Bean 的初始化方法和销毁方法

      本文链接:https://www.haomeiwen.com/subject/nvutkltx.html