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