BeanFactory与ApplicationContext的关系
对比
1:BeanFactory是Spring的早期接口,称为Spring的Bean工厂,ApplicationContext是后期更高级接口,称之为Spring 容器;
2:ApplicationContext在BeanFactory基础上对功能进行了扩展,例如:监听功能、国际化、资源解析功能等。BeanFactory的API更偏向底层,ApplicationContext的API大多数是对这些底层API的封装;
3:Bean创建的主要逻辑和功能都被封装在BeanFactory中,ApplicationContext不仅继承了BeanFactory,而且ApplicationContext内部还维护着BeanFactory的引用,所以,ApplicationContext与BeanFactory既有继承关系,又有融合关系。
4:Bean的初始化时机不同,原始BeanFactory是在首次调用getBean时才进行Bean的创建,而ApplicationContext则是配置文件加载,容器-创建就将Bean都实例化并初始化好了。
BeanFactory
BeanFactory是Spring框架的核心接口之一,它定义了Spring容器的基本行为,负责管理Bean的生命周期、配置元数据和依赖注入。BeanFactory的主要功能包括:
Bean的实例化和管理:BeanFactory负责创建、初始化和管理Bean的生命周期。它会根据配置文件中定义的Bean定义来创建Bean的实例。
依赖注入:BeanFactory负责解决Bean之间的依赖关系,确保每个Bean都能获取它所依赖的其他Bean。
配置元数据的管理:BeanFactory会读取和管理应用程序的配置元数据,通常以XML、注解或Java配置的方式定义Bean及其属性。
延迟初始化:BeanFactory支持延迟初始化,即只有在需要时才创建Bean实例。
AOP支持:BeanFactory支持面向切面编程(AOP),允许在Bean的生命周期中应用切面。
BeanFactory的子类
DefaultListableBeanFactory:DefaultListableBeanFactory是BeanFactory接口的主要实现,它是Spring IoC容器的核心,负责管理Bean的生命周期、依赖注入、AOP支持等。它支持各种不同的Bean定义来源,包括XML、注解和Java配置。
ApplicationContext:ApplicationContext是BeanFactory的子类,它是更高级的Spring容器。它扩展了BeanFactory的功能,提供了更多的应用级功能,如国际化、事件传播、资源加载、应用上下文层次结构等。这个类是我们最熟悉的类,也是spring的核心。