理解Spring Bean生命周期

一、Spring Bean的概念

Spring bean通常来说是指被Spring容器所管理的java对象;而spring容器就是负责实例化、配置和装配Spring bean;

二、Spring Bean容器

Spring Bean容器可以获取Spring Bean,通过BeanFacroty接口或ApplicationContext接口,两者的区别在于Application继承自BeanFacrory接口,所以Application包含了Beanfactory的所有功能以及拓展了更多功能,而且BeanFactory是懒加载的,ApplicationContext是预加载;

三、实例化SpringBean

Spring提供了三种初始化方式

1.实现InitializingBean接口

public interface InitializingBean{

  void afterPropertiesSet() throws Exception;
}

2.@PostConstruct,通常将注解放在方法上

@PostConstrcut
public void init(){
 System.out.println("init method...");
}

3.init-method

public class MyClass{
     public void init(){
       System.out.println("init method...");
    } 
}
@Configuration
public class AppConfig{
    
     @Bean(initMethod="init")
     public MyClass myclass(){
      return new MyClass(); 
    }

}

或者是这种xml配置

这三种初始化方式在框架中组合使用,调用顺序是@PostContruct会被最先调用,其次是InitializingBean.afterPropertiesSet()方法,最后是调用通过xml配置的init-method方法或者设置@Bean注解设置的initMethod方法;

而在实例化Spring Bean之前会有两个回调方法,这个好理解,就好像页面加载一样,有生命周期函数,而这个生命周期函数的实现就是BeanPostProcessor接口,BeanPostProcessor有两个方法,分别是postProcessorBeforeInitialization和postProcessorAfterInitialization;

所以到目前为止,我们知道的Spring Bean的生命周期函数就是如下这种情况;

理解Spring Bean生命周期_第1张图片

四、Spring Bean的销毁

既然有创建就会有销毁,否则就是滥用内存,当Spring移除bean时,相关回调方法如下;

我们知道初始化又@PostConsruct、InitializingBean.afeterPropertiesSet()、init-method三种方式,那么对应这三种创建方式便会有三种对应的销毁方式,具体如下;

1.DisposableBean

2.@PreDestory

3.destory-mthod

组合使用调用顺序是@PreDestory、DisposabelBean.destory()、调用XML配置的destory-method方法或者是@Bean注解设置的饿destoryMethod属性的方法

自此我们知道的Spring Bean的生命周期就更加全面了,具体流程如下

理解Spring Bean生命周期_第2张图片

你可能感兴趣的:(理解Spring Bean生命周期)