美文网首页
Spring Bean的生命周期

Spring Bean的生命周期

作者: 那谁319 | 来源:发表于2018-08-05 19:43 被阅读0次
    • Spring Bean生命周期
    Spring的ioc容器负责Spring的Bean的创建和管理等功能。
    BeanFactory和ApplicationContext是Spring两种很重要的容器,前者提供了最基本的依赖注入的支持,而后者在继承前者的基础进行了功能的拓展,例如增加了事件传播,资源访问和国际化的消息访问等功能。本文简单介绍ApplicationContext和BeanFactory两种容器的Bean的生命周期。
    
    • ApplicationContext容器中,流程大致如下:
    1.首先容器启动后,会对scope为singleton且非懒加载的bean进行实例化,
    2.按照Bean定义信息配置信息,注入所有的属性,
    3.如果Bean实现了BeanNameAware接口,会回调该接口的setBeanName()方法,传入该Bean的id,此时该Bean就获得了自己在配置文件中的id,
    4.如果Bean实现了BeanFactoryAware接口,会回调该接口的setBeanFactory()方法,传入该Bean的BeanFactory,这样该Bean就获得了自己所在的BeanFactory,
    5.如果Bean实现了ApplicationContextAware接口,会回调该接口的setApplicationContext()方法,传入该Bean的ApplicationContext,这样该Bean就获得了自己所在的ApplicationContext,
    6.如果有Bean实现了BeanPostProcessor接口,则会回调该接口的postProcessBeforeInitialzation()方法,
    7.如果Bean实现了InitializingBean接口,则会回调该接口的afterPropertiesSet()方法,
    8.如果Bean配置了init-method方法,则会执行init-method配置的方法,
    9.如果有Bean实现了BeanPostProcessor接口,则会回调该接口的postProcessAfterInitialization()方法,
    10.经过流程9之后,就可以正式使用该Bean了,对于scope为singleton的Bean,Spring的ioc容器中会缓存一份该bean的实例,而对于scope为prototype的Bean,每次被调用都会new一个新的对象,期生命周期就交给调用方管理了,不再是Spring容器进行管理了
    11.容器关闭后,如果Bean实现了DisposableBean接口,则会回调该接口的destroy()方法,
    12.如果Bean配置了destroy-method方法,则会执行destroy-method配置的方法,至此,整个Bean的生命周期结束
    
    • BeanFactoty容器中, Bean的生命周期与ApplicationContext相比,有如下几点不同:
    1.BeanFactory容器中,不会调用ApplicationContextAware接口的setApplicationContext()方法,
    2.BeanPostProcessor接口的postProcessBeforeInitialzation()方法和postProcessAfterInitialization()方法不会自动调用,必须自己通过代码手动注册
    3.BeanFactory容器启动的时候,不会去实例化所有Bean,包括所有scope为singleton且非懒加载的Bean也是一样,而是在调用的时候去实例化。
    

    参看

    相关文章

      网友评论

          本文标题:Spring Bean的生命周期

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