Spring前置准备(八)——ConfigurableApplicationContext和DefaultListableBeanFactory的区别

这章没有什么主要内容,主要是回忆并总结并回忆一下之前的问题,ConfigurableApplicationContext和DefaultListableBeanFactory有什么区别?

ConfigurableApplicationContext的作用

ConfigurableApplicationContext 对Spring工厂进行了扩展操作,主要扩展了以下内容:

  1. **资源加载,资源协议解析:**如果是手动创建bean工厂对象,则需要我们自己对例如xml文件进行解析处理等操作,而ApplicationContext及其接口中做了相应的处理,不再需要我们创建ApplicationContext对象的时候再去解析配置文件
  2. **Bean 的批量处理:**BeanFacory 只能处理单个bean对象,而ApplicationContext对其作了扩展,实现了批量处理
  3. **Bean 的生命周期管理:**BeanFacory本质上是一个容器,即使手动创建也需要我们来管理工厂的生命周期,例如:开启容器
  4. **国际化:**这个就更不用说明了,BeanFacory是无法处理国际化的问题的,ApplicationContext对其进行了扩展
  5. **环境变量的初始化:**同样BeanFacory也无法处理环境变量的的问题的,ApplicationContext对其进行了扩展
  6. **工厂分层:**新增了父工厂的概念

DefaultListableBeanFactory的作用

DefaultListableBeanFactory同样对Bean 工厂的相关的操作做了扩展,但是方向有些不同:

  1. Bean定义对象的操作
  2. Bean的创建与获取
  3. 以来注入的处理
  4. 作用域的支持

ConfigurableApplicationContext和DefaultListableBeanFactory的区别

  1. DefaultListableBeanFactory 和 ConfigurableApplicationContext 虽然都对 Bean 工厂功能进行了扩展,但它们有着不同的职责和设计目的,
  2. 简单来讲DefaultListableBeanFactory 更像是Bean工厂的基础实现,
  3. 打个比方,他就像一个房子,房子的功能是居住,要有墙,然后床,桌子椅子等基础设施,
  4. 例如:Spring的主要核心是Ioc,那么它就必须存在容器,所以DefaultListableBeanFactory 中存在了很多Map 集合来保存容器的实例这里可以把容器比作床,工厂对象是房子,
  5. 可是单单有容器时不够的,还需要类似门一类的东西,让人进出,也就是获取Bean和销毁Bean的相关方法,这些都是Spring框架的基础设施,
  6. 而ConfigurableApplicationContext 更像是为了让人住的更舒服对设施做的扩展功能,
  7. 例如:以前的厕所是需要上完厕所后雇人挑粪的,但是现在加装了冲水马桶,人们的操作更加的方便和快捷了,
  8. 比如:资源加载,解析,在存在ConfigurableApplicationContext 之前这些操作都需要我们自己加载文件,解析文件,然后关闭释放资源,而这一切都被ConfigurableApplicationContext 封装好了
相关推荐
拽着尾巴的鱼儿3 分钟前
国密算法 Spring Boot 实战:SM2/SM3/SM4 完整集成指南
spring boot·后端·算法
一条泥憨鱼4 分钟前
Stream流-从进阶到起飞
java·ide·后端·stream
Devin~Y5 分钟前
大厂Java面试实战:Spring Boot微服务、Redis缓存、Kafka消息队列与Spring AI RAG
java·spring boot·redis·kafka·mybatis·spring mvc·hikaricp
qingfeng154158 分钟前
企业微信定时群发实战:API 如何实现批量消息自动发送?
java·开发语言·python·自动化·企业微信
qingfeng1541511 分钟前
企业微信 API 可以做什么?
java·开发语言·python·自动化·企业微信
梧桐和风12 分钟前
2026 年 Java 趋势:AI 浪潮下,Java 会过时吗?
java·开发语言·人工智能
Hesionberger12 分钟前
LeetCode105:前序中序构建二叉树(三解法)
java·数据结构·python·算法·leetcode·深度优先
嗨嗨的迷子13 分钟前
JDK 17 远程调试连不上 5005:从 attach timeout 到 JDWP 监听地址变更
java·开发语言
Chase_______14 分钟前
【Java杂项】为什么 long 可以自动转 float?宽化基本类型转换与精度丢失详解
java·开发语言·python
invicinble15 分钟前
java数组相关的信息量
java·开发语言·python