?
兩個(gè)主要容器
BeanFactory?????????????????? XmlBeanFactory???????????????????????????????
??????????????????????????????????? FileSystemXmlApplicationContext
ApplicationContext?????????? ClassPathXmlApplicationContext
??????????????????????????????????? XmlWebApplicationContext
區(qū)別:
BeanFactory????? 延遲載入所有Bean,直到getBean()被調(diào)用才創(chuàng)建Bean。
ApplicationContext 啟動(dòng)后加載所有Bean
?
Bean生命周期:BeanFactory容器
?
實(shí)例化
? 設(shè)置屬性
??? 調(diào)用BeanNameAware的setBeanName()方法
?????? 調(diào)用BeanFactoryAware的setBeanFactory()方法
????????? 調(diào)用ApplicationContextAware的setApplicationContext()方法(如果容器為ApplicationContext)
????????? 調(diào)用BeanPostProcessor的預(yù)初始化方法
???????????? 調(diào)用InitializingBean的afterPropertiesSet()方法
???????????? 調(diào)用定制的初始化方法(init-method參數(shù)配置的方法)
????????? 調(diào)用BeanPostProcessor的后初始化方法
至此Bean可以被使用
?
調(diào)用DisposableBean的destroy()方法
調(diào)用定制的銷毀方法(destroy-method參數(shù)配置的方法)
至此Bean被銷毀
?
BeanFactoryPostProcessor例子
- PropertyPlaceholderConfigurer
??? 從多個(gè)外部屬性文件中載入屬性,并使用這些屬性替換占位符變量
<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
??? 注冊(cè)定制的java.bean.PropertyEditor實(shí)現(xiàn),用它把裝配的屬性轉(zhuǎn)化為其他類型,可使用String設(shè)置給一個(gè)非String屬性