天天看點

老師總結的Bean生命周期

>>>>Bean的生命周期

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的生命周期結束