分析BeanFactory和ApplicationContext的区别

  首先,BeanFactory和ApplicationContext都是Spring IOC容器,至于它们的不同点,先结合官方文档进行说明,文档地址:https://docs.spring.io/spring-framework/docs/5.3.24/reference/html/core.html#spring-core。

  在官方文档The IoC Container一节中,对两者有如下描述:

  

   总结一下框起来的红色部分内容:BeanFactory接口提供了一些高级配置的机制来管理对象。而ApplicationContext是BeanFactory的子接口,然后提供以下的特性:

  • 和Spring AOP的整合
  • 消息资源处理(用于国际化)
  • 事件发布
  • 应用级别上下文,类似于WebApplicationContext

  官方文档中已经说得很清楚,ApplicationContext是BeanFactory的子接口,然后在BeanFactory的基础上做了一系列的增强。接下来可以从源码上更进一步观察两者的区别。

  先看一下AbstractApplicationContext#refresh的代码:

  

   AbstractApplicationContext#refresh方法是Spring上下文启动的最关键方法,这里的obtainFreshBeanFactory方法其实就是返回一个DefaultListableBeanFactory。所以AbstractApplicationContext的实现思路也有利用代理模式。

posted @ 2023-04-03 09:59  阳光、大地和诗歌  阅读(34)  评论(0编辑  收藏  举报