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

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.kler.cn/news/357197.html

相关文章:

  • spring mvc后端实现过程
  • 【计算机网络 - 基础问题】每日 3 题(四十一)
  • 字节回应实习生破坏大模型训练:确有此事 但部分报道夸大失实
  • 推荐系统 # 二、推荐系统召回:协同过滤 ItemCF/UserCF、离散特征处理、双塔模型、自监督学习、多路召回、曝光过滤
  • VUE 仿神州租车-开放平台
  • Java中的一些名词概念
  • C++服务端的配置文件库介绍
  • Linux 中文件的权限说明
  • 论线段树的调试
  • 如何保护您的服务器免受Shellshock Bash漏洞的影响
  • IDEA项目提交至SVNGIT仓库
  • 【升华】人工智能python重要库scikit-learn学习
  • 【ARM】MDK-Flex服务管理软件使用说明
  • 基于SpringBoot+Vue+uniapp微信小程序的校园反诈骗微信小程序的详细设计和实现(源码+lw+部署文档+讲解等)
  • 【华为HCIP实战课程十三】OSPF网络中3类LSA及区域间负载均衡,网络工程师
  • 读人工智能全传16读后总结与感想兼导读
  • 苍穹外卖笔记
  • LeetCode 206 - 反转链表
  • YoloV10改进:Block改进|使用ContextAggregation模块改善C2f模块|即插即用
  • 探索C++的工具箱:双向链表容器类list(1)