两个主要容器
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属性