当前位置: 首页 > news >正文

Spring容器详解:BeanFactory和ApplicationContext的不同

Spring容器

创建容器的几种方式

方式一:类路径加载配置文件

ApplicationContext context =new ClassPathXmlApplicationContext("application.xml");

方式二:文件路径加载配置文件

 ApplicationContext context =new FileSystemXmlApplicationContext("D:\\applicationContext.xml");

方式三:加载多个配置文件

ApplicationContext context =new ClassPathXmlApplicationContext("bean1.xml","bean2.xml");

获取bean

方式一:使用bean名称获取

 BookDao bookDao =(BookDao) context.getBean("bookDao");

方式二:使用bean名称获取并指定类型

BookDao bookDao =context.getBean("bookDao",BookDao.class);

方式三:使用bean类型获取

  BookDao bookDao =context.getBean(BookDao.class);

按照类型查找时,容器中这个类型的bean只能有一个,存在多个类型相同的bean就会报错。  

容器类层次结构

这个层次图中,第一个ApplicationContext接口提供的是基础的功能,下面的ConfigurableApplicationContext接口是一个子接口,对接口进行了功能的追加。 其他都是他们的实现类  

BeanFactory

  • 是Spring框架中最底层的接口,是IoC(控制反转)容器的核心。
  • 主要负责Bean的定义、加载、实例化、依赖注入和生命周期管理。
  • 提供了IoC容器最基本的功能。

ApplicationContext

  • 是BeanFactory的子接口,由BeanFactory派生而来。
  • 扩展了BeanFactory的功能,并提供了更全面的容器特性。
  • 是Spring应用中的核心容器,用于管理和配置应用中的对象(称为beans)。

 BeanFactory和ApplicationContext的区别

功能差异

BeanFactory

  • 功能较为基础,主要关注于Bean的实例化、配置和生命周期管理。
  • 采用延迟加载策略,即在容器启动时不会立即创建所有Bean,而是在Bean被请求时(通过getBean()方法)才会创建和加载。
  • 不支持国际化、资源文件访问等高级功能。
  • 主要面向Spring框架本身,为框架内部的Bean管理提供基础设施。

ApplicationContext

  • 包含了BeanFactory的所有功能,并在此基础上增加了许多高级特性,如AOP(面向切面编程)、事件发布、国际化、资源加载、Bean生命周期管理、安全性等。
  • 在容器启动时,会一次性创建并加载所有Bean,这使得它能够在启动时发现配置错误,如依赖注入问题。
  • 提供了更丰富的Bean管理功能,如自动装配、生命周期管理等。
  • 主要面向使用Spring框架的开发者,提供了更全面的容器服务。

加载与配置方式

BeanFactory

  • 通常以编程的方式创建和配置

ApplicationContext:

  • 支持以声明的方式(如XML配置文件、注解等)进行配置,使得配置更加灵活和方便。

 适用场景

BeanFactory:适用于资源受限的环境或轻量级的应用程序,因为它具有较小的内存占用和较快的启动速度。

ApplicationContext:适用于大多数企业级应用,特别是那些需要全面容器服务的场景。它提供了更丰富的功能和更好的开发体验。


http://www.mrgr.cn/news/54377.html

相关文章:

  • MyBatis入门程序之客户添加、更新与删除
  • 解决Git合并冲突:掌握版本控制的精髓
  • Spring Boot配置文件不识别变量的解决方案
  • LeetCode 每日一题 最小差值 I
  • filebeat接入nginx和mysql获取日志
  • 电影评论网站开发:Spring Boot技术指南
  • 在 Docker 中搭建 PostgreSQL16 主从同步环境
  • 大学生入学审核|基于springBoot的大学生入学审核系统设计与实现(附项目源码+论文+数据库)
  • # Go 语言中的 Interface 和 Struct
  • 在线图片翻译有哪些?快速识别并翻译图中文字就用它
  • 字节回应实习生破坏大模型训练:确有此事 但部分报道夸大失实
  • C# Linq常用方法
  • Django 测试指南
  • NVIDIA cuDNN
  • SpringCloud学习:Seata总结与回顾
  • Qt开发技巧(十七):新窗口控件用智能指针,将一些配置类变量封装起来,Qt窗体的Z序叠放,子窗体的释放,Qt中的事件发送,Qt的全局头文件
  • 二、见招拆招:ShardingJDBC分库分表实战指南
  • springboot物流网站-计算机毕业设计源码90281
  • AI 通俗理解强人工智能和弱人工智能
  • 数据结构8—树(链式存储二叉树)
  • 组流技术与流特征分析
  • 软考(网工)——网络规划设计
  • ICM20948 DMP代码详解(90)
  • 什么是 Idempotence 以及它在哪里使用?
  • Windows 11开发环境搭建与应用开发实践
  • lesson01 Backtrader是什么