Spring注解驱动开发(二) 组件生命周期

Bean的生命周期

Bean的 创建 --- 初始化 --- 销毁
容器可以帮我们管理Bean的生命周期,不过我们可以自定义初始化和销毁方法,容器在bean进行到生命周期的初始化和销毁过程时调用自定义的方法(hooks?)。

关于对象的创建
单实例:容器启动时创建 @Lazy除外
多实例:获取时创建

初始化:对象创建完成并赋值后调用初始化方法

销毁: 单实例容器关闭时,销毁。多实例,容器不调用销毁方法

1.XML版本

<Bean init-method="init" destory-method="destory"></Bean>

2.注解版本

@Bean(initMethod="init",destoryMethod="destory")

3.InitializingBean 与 DisposableBean 接口

实现这两个接口

  • InitializingBean : afterPropertiesSet(){}
  • DisposableBean :destory(){}

4. @PostConstruct 与 @PreDestroy

这两个来自于 JSR250 规范。使用时标注在相应的方法上。例如

@Component
public class Cat{
  @PostConstruct
  public void init(){}
  @PreDestroy
  public void destroy(){}
}

5. BeanPostProcessor Bean的后置处理器

BeanPostProcessor是一个接口

public interface BeanPostProcessor {
    @Nullable
    default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { // 在任何初始化动作之前,包括InitializingBean 
        return bean;
    }

    @Nullable
    default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { //在初始化动作之后
        return bean;
    }
}

顺序问题

Cat  //构造器
BeanPostProcessor  beforecat // beforeBeanProcessor
PostConstruct // @PostConstruct
afterPropertiesSet init // InitializingBean
@Bean init  // 自定义
BeanPostProcessor  after cat // afterBeanBrocessor

posted @ 2021-05-27 16:38  Taofoo  阅读(65)  评论(0)    收藏  举报