Spring之Bean的生命周期

88 阅读1分钟

350.jfif

Bean从出生到销毁到底经历了哪些事情呢?如果我们想要在Bean创建或者销毁的时候执行一些自定义的逻辑要怎么做呢?❤️

是什么

  • Bean的生命周期指的是 Bean的创建->初始化->销毁 的过程
  • 由容器管理bean的生命周期
  • 我们可以自定义初始化和销毁方法,容器在Bean进行到当前生命周期的时候,调用我们自定义的初始化和销毁方法

详解

  • 1)xml配置的方式的时候我们配置个bean 其中有init-method和destroy-method属性,指定自定义的初始化销毁方法。
  • 在@Bean注解中指定initmethod和destroymethod
@Bean(initMethod = "init", destroyMethod = "detory")
public Car car(){
    return new Car();
}

//Car类
public class Car{
    public Car(){
        System.out.println("car constructor");
    }
    
    public void init(){
        System.out.println("car init...");
    }
    
    public void detory(){
        System.out.println("car detory...");
    }
}

单实例:对象创建完成,赋值完成,就会调用init方法。容器关闭的时候就会调用destroy方法 多实例:在获取Bean的时候调用init方法,但是容器不会调用销毁方法

  • 通过让Bean实现InitializingBean (定义初始化逻辑) DisposableBean (定义销毁逻辑)
public class Car implements InitializingBean,DisposableBean{}
  • 使用@PostConstruct: 标识初始化方法 @PreDestroy:标识销毁方法
//对象创建并赋值之后调用
@PostConstruct
public void init(){
    System.out.println("@PostConstruct...");
}

//容器移除对象之前
@PreDestroy
public void detory(){
    System.out.println("@PreDestroy");
}
  • BeanPostProcessor:Bean的后置处理器,在Bean初始化前后进行一些处理工作
/**
 * 后置处理器,实例化前后进行处理工作
 */
public class MyBeanPostProcessor implements BeanPostProcessor{

    @Nullable
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("postProcessBeforeInitialization...");

        return bean;
    }

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