BeanFactory 和 ApplicationContext的区别

BeanFactory :

是Spring⾥⾯最底层的接⼝,是IOC的核心,提供了简单的基本的容器的功能,提供了Bean的定义、加载、实例化、依赖注入和生命周期管理等基本功能。

ApplicationContext:

是BeanFactory 的子类接口,它具备BeanFactory 所提供的功能之外,还提供了更加完整的框架功能:

1)国际化(MessageSource)
2) 访问资源,如URL和⽂件(ResourceLoader)
3) 载⼊多个(有继承关系)上下⽂,使得每⼀个上下⽂都专注于⼀个特定的层次,⽐如应⽤的web层
4) 消息发送、响应机制(ApplicationEventPublisher)
5) AOP(拦截器)

两者加载Bean之间的区别:

BeanFactory :

采用延迟加载的方式注入Bean,在使用到某个Bean时调用getBean()方法,这时才对该Bean进行加载实例化的操作。这种方式在容器启动时我们不易发现Spring中所 存在的配置问题,只有当我们实例化某个Bean调用getBean()方法时才会抛出异常。
支持BeanPostProcessor和BeanFactorPostProcessor的使用,但BeanFactory 需要手动注册。
通常以编程的方式被创建.

ApplicationContext:

在启动容器时,一次性创建所有的Bean,在容器启动时,如果存在配置错误就会抛出异常,这样有利于我们检查各个Bean所依赖的属性是否注入。这种加载方式在程序运行期间速度会比较快,因为各个Bean都已经创建。不足之处在于相对于BeanFactory 的延迟加载的形式,ApplicationContext会占用更多的内存空间,而且在配置的Bean较多时,程序的启动速度较为缓慢。
支持BeanPostProcessor和BeanFactorPostProcessor的使用, ApplicationContext会自动注册。
可以使用声明的方式被创建,如使用ContextLoader.

总结

ApplicationContext继承了BeanFactory,BeanFactory是Spring中比较原始的Factory,它不支持AOP、Web等Spring插件,而ApplicationContext不仅包含了BeanFactory的所有功能,还支持Spring的各种插件,还以一种面向框架的方式工作以及对上下文进行分层和实现继承。
BeanFactory是Spring框架的基础设施,面向Spring本身;而ApplicationContext面向使用Spring的开发者,相比BeanFactory提供了更多面向实际应用的功能。

猜你喜欢

转载自blog.csdn.net/m0_71074684/article/details/125219600