?
兩個主要容器
BeanFactory?????????????????? XmlBeanFactory???????????????????????????????
??????????????????????????????????? FileSystemXmlApplicationContext
ApplicationContext?????????? ClassPathXmlApplicationContext
??????????????????????????????????? XmlWebApplicationContext
區別:
BeanFactory????? 延遲載入所有Bean,直到getBean()被調用才創建Bean。
ApplicationContext 啟動后加載所有Bean
?
Bean生命周期:BeanFactory容器
?
實例化
? 設置屬性
??? 調用BeanNameAware的setBeanName()方法
?????? 調用BeanFactoryAware的setBeanFactory()方法
????????? 調用ApplicationContextAware的setApplicationContext()方法(如果容器為ApplicationContext)
????????? 調用BeanPostProcessor的預初始化方法
???????????? 調用InitializingBean的afterPropertiesSet()方法
???????????? 調用定制的初始化方法(init-method參數配置的方法)
????????? 調用BeanPostProcessor的后初始化方法
至此Bean可以被使用
?
調用DisposableBean的destroy()方法
調用定制的銷毀方法(destroy-method參數配置的方法)
至此Bean被銷毀
?
BeanFactoryPostProcessor例子
- PropertyPlaceholderConfigurer
??? 從多個外部屬性文件中載入屬性,并使用這些屬性替換占位符變量
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
??? <property name="locations">
??????? <list>
?<value>WEB-INF/mail.properties</value>
?<value>WEB-INF/jdbc.properties</value>
??????? </list>
???? </property>
</bean>
- CustomEditorConfigurer
??? 注冊定制的java.bean.PropertyEditor實現,用它把裝配的屬性轉化為其他類型,可使用String設置給一個非String屬性