BeanFactory和ApplicationContext
BeanFactory:IoC容器。Spring框架最核心的接口,提供了高级IoC的配置机制。是Spring框架的基础设施,面向Spring本身
ApplicationContext:应用上下文,Spring容器。面向使用Spring框架的开发者,更易于创建实际应用。
BeanFactory
BeanFactory是一个类的通用工厂,可以创建并管理各种类的对象。Spring称这些被创建和管理的Java对象为Bean。
ApplicationContext
ApplicationContext由BeanFactory派生而来,提供了更多面向实际应用的功能。
Bean的生命周期
1. Spring对bean进行实例化;
2. Spring将值和bean的引用注入到bean对应的属性中;
3. 如果bean实现了BeanNameAware
接口,Spring将bean的ID传递给setBeanName()
方法
4. 如果bean实现了BeanFactoryAware
接口,Spring将调用setBeanFactory()
方法,将BeanFactory容器实例传入;
5. 如果bean实现了ApplicationContextAware
接口,Spring将调用setApplicationContext()
方法,将bean所在的应用上下文的引用传入进来;
6. 如果bean实现了BeanPostProcessor
接口,Spring将调用它们的postProcessBeforeInitialization()
方法;
7. 如果bean实现了InitializaingBean
接口,Spring将调用它们的afterPropertiesSet()
方法。类似地,如果bean使用init-method
声明了初始化方法,该方法也会被调用;
8. 如果bean实现了BeanPostProcessor
接口,Spring将调用它们的postProcessAfterInitialization()
方法;
9. 此时,bean已经准备就绪,可以被应用程序使用,它们将一直驻留在应用上下文中,直到该应用上下文被销毁;(容器在,bean也一直在)
10. 如果bean实现了DisposableBean
接口,Spring调用它的destroy()
接口方法。同时,如果bean使用destroy-method
声明了销毁方法,该方法也会被调用
3-5 构建属性
6-8 如果有附加在bean上的方法则调用
9-10 销毁bean