在基于Spring的應用中,應用對象生存于Spring容器中。Spring容器建立對象,裝配它們,配置它們,管理它們的整個生命周期,從生存到死亡(或者從建立到銷毀)。
Spring容器使用依賴注入管理構成應用的元件,它會建立互相協作的元件之間的關聯。
Spring自帶幾種容器實作,可以歸為兩種不同的類型。Bean工廠(由org.springframework.beans.factory.BeanFactory接口定義)和應用上下文(由org.springframework.context.ApplicationContext接口定義)。
1.與應用上下文共事
Spring自帶了幾種類型的應用上下文:
(1)ClassPathXmlApplicationContext:從類路徑下的XML配置檔案中加載上下文定義。
(2)FileSystemXmlApplicationContext:讀取檔案系統下的XML配置檔案并加載上下文定義。
(3)XmlWebApplicationContext:讀取Web應用下的XML配置檔案并裝載上下文定義。
2.Bean的生命周期
(1)執行個體化:Spring對Bean進行執行個體化。
(2)填充屬性:Spring将值和Bean的引用注入進Bean對應的屬性中。
(3)調用BeanNameAware的setBeanName()方法:如果Bean實作了BeanNameAware接口,Spring将Bean的ID傳遞給setBeanName()接口方法。
(4)調用BeanFactoryAware的setBeanFactory()方法:如果Bean實作了BeanFactoryAware接口,Spring将調用setBeanFactory()接口方法,将BeanFactory容器執行個體傳入。
(5)調用ApplicationContextAware的setApplicationContext()方法:如果Bean實作了ApplicationContextAware接口,Spring将調用setApplicationContext()接口方法,将應用上下文的引用傳入。
(6)調用BeanPostProcessor的預初始化方法:如果Bean實作了BeanPostProcessor接口,Spring将調用它們的postProcessBeforeInitialization()接口方法。
(7)調用InitializingBean的afterPropertiesSet()方法:如果Bean實作了InitializingBean接口,Spring将調用它們的afterPropertiesSet()接口方法。
(8)調用定制的初始化方法:如果Bean使用init-method聲明了初始化方法,該方法也會被調用。
(9)調用BeanPostProcessor的後初始化方法:如果Bean實作了BeanPostProcessor接口,Spring将調用它們的postProcessAfterInitialization()方法。
(10)此時此刻,Bean已經準備就緒,可以被應用程式使用了,它們将一直駐留在應用上下文中,直到該應用上下文被銷毀。
(11)調用DisposableBean的destroy方法:如果Bean實作了DisposableBean接口,Spring将調用它的destroy()接口方法。
(12)調用定制的銷毀方法:如果Bean使用了destroy-method聲明了銷毀方法,該方法也會被調用。