Spring 中 ApplicationContext 和 BeanFactory 的区别有哪些

先看一张类图:
在这里插入图片描述
区别:
1:包目录不同:
spring-beans.jar 中 org.springframework.beans.factory.BeanFactory
spring-context.jar 中 org.springframework.context.ApplicationContext

2:国际化:
BeanFactory 是不支持国际化功能的,因为 BeanFactory 没有扩展 Spring 中 MessageResource
接口。相反,由于 ApplicationContext 扩展了 MessageResource 接口,因而具有消息处理的能力
(i18N)。

3:强大的事件机制(Event):
基本上牵涉到事件(Event)方面的设计,就离不开观察者模式,ApplicationContext 的事件机制
主要通过 ApplicationEvent 和 ApplicationListener 这两个接口来提供的,和 Java swing 中的事件
机制一样。即当 ApplicationContext 中发布一个事件时,所有扩展了 ApplicationListener 的 Bean
都将接受到这个事件,并进行相应的处理。

4:底层资源的访问:
ApplicationContext 扩展了 ResourceLoader(资源加载器)接口,从而可以用来加载多个
Resource,而 BeanFactory 是没有扩展 ResourceLoader。

5:对 Web 应用的支持:
与 BeanFactory 通常以编程的方式被创建,ApplicationContext 能以声明的方式创建,如使用
ContextLoader。当然你也可以使用 ApplicationContext 的实现方式之一,以编程的方式创建 ApplicationContext实例。

6:延迟加载:

  • BeanFactroy 采用的是延迟加载形式来注入 Bean 的,即只有在使用到某个 Bean 时(调用
    getBean()),才对该 Bean 进行加载实例化。这样,我们就不能发现一些存在的 spring 的配置
    问题。而 ApplicationContext 则相反,它是在容器启动时,一次性创建了所有的 Bean。这
    样,在容器启动时,我们就可以发现 Spring 中存在的配置错误。
  • BeanFactory 和 ApplicationContext 都支持 BeanPostProcessor、
    BeanFactoryPostProcessor 的使用。两者之间的区别是:BeanFactory 需要手动注册,而
    ApplicationContext 则是自动注册。

可以看到,ApplicationContext 继承了 BeanFactory,BeanFactory 是 Spring 中比较原始的
Factory,它不支持 AOP、Web 等 Spring 插件。而 ApplicationContext 不仅包含了 BeanFactory
的所有功能,还支持 Spring 的各种插件,还以一种面向框架的方式工作以及对上下文进行分层和实
现继承。

BeanFactory 是 Spring 框架的基础设施,面向 Spring 本身;而 ApplicationContext 面向使用
Spring 的开发者,相比 BeanFactory 提供了更多面向实际应用的功能,几乎所有场合都可以直接使
用 ApplicationContext,而不是底层的 BeanFactory。

7:常用容器:
BeanFactory 类型的有 XmlBeanFactory,它可以根据 XML 文件中定义的内容,创建相应的
Bean。
ApplicationContext 类型的常用容器有:

  • ClassPathXmlApplicationContext:从 ClassPath 的 XML 配置文件中读取上下文,并生成上
    下文定义。应用程序上下文从程序环境变量中取得。
  • FileSystemXmlApplicationContext:由文件系统中的 XML 配置文件读取上下文。
  • XmlWebApplicationContext:由 Web 应用的 XML 文件读取上下文。例如我们在 Spring MVC
    使用的情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/411391.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

APP被针对攻击了,要怎么解决

随着APP行业的兴起,游戏公司异军突起,不管是在控证还是攻击方面都是属于最复杂的一个场面,游戏APP逐渐成为DDOS流量攻击的“重灾区”。没有提前做好了解就盲目进军游戏APP行业,一旦被攻击就会让公司束手无策。那么,刚上…

Python从入门到精通指南【第101篇—入门到精通】【文末送书-24】

文章目录 Python从入门到精通指南第一步:入门基础1.1 安装Python1.2 Hello World1.3 变量和数据类型1.4 控制流程 第二步:深入学习2.1 函数和模块2.2 列表、元组和字典2.3 文件操作 第三步:高级主题3.1 面向对象编程3.2 异常处理3.3 正则表达…

python_pyecharts绘制漏斗图

python-pyecharts绘制漏斗图 from pyecharts.charts import Funnel from pyecharts import options as opts# 数据 data [("访问", 100), ("咨询", 80), ("订单", 60), ("点击", 40), ("展现", 20)]# 创建漏斗图 funnel …

Qt OpenGL程序在Windows下正常,但在Linux下无显示问题【已解决】

Qt OpenGL程序在Windows下正常,但在Linux下无显示问题【已解决】 引言一、问题描述二、解决方案三、解决过程记录3.1 定位问题3.2 解决问题,深入分析 引言 在Windows上正常运行的OpenGL程序,到Linux下正常编译…但是没有任何显示(只有背景颜…

【数据结构与算法】动态规划法解题20240227

动态规划法 一、什么是动态规划二、动态规划的解题步骤三、509. 斐波那契数1、动规五部曲: 四、70. 爬楼梯1、动规五部曲: 五、746. 使用最小花费爬楼梯1、动规五部曲: 一、什么是动态规划 动态规划,英文:Dynamic Pro…

23年中科院1区算法|长鼻浣熊优化算法COA原理及其利用与改进(Matlab/Python)

文章来源于我的个人公众号:KAU的云实验台,主要更新智能优化算法的原理、应用、改进 CEC2005中的测试 本文 KAU将介绍一个2023年1月发表在中科院1区KBS上的优化算法——长鼻浣熊优化算法(Coati Optimization Algorithm,COA)[1] 该算法由Dehg…

SpringBoot源码解读与原理分析(三十四)SpringBoot整合JDBC(三)声明式事务的传播行为控制

文章目录 前言10.5 声明式事务的传播行为控制10.5.1 修改测试代码(1)新建一个Service类,并引用UserService(2)修改主启动类 10.5.2 PROPAGATION_REQUIRED10.5.2.1 tm.getTransaction(1)获取事务…

IO进程线程作业day7

信号灯集共享内存 自定义头文件 #ifndef SEM_H_ #define SEM_H_ //创建信号灯集, int creat_t(int number); //申请释放资源 int P(int semid,int semno); //申请释放资源 int V(int semid,int semno); //删除信号灯集 int del(int semid); #endif信号灯集函数集合 #include…

物资管理新篇章:Java+SpringBoot实战

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

基于 ResNet50和 SVM + 决策树的人脸口罩检测

欢迎收看,这篇文章是关于我如何使用 ResNet50作为特征提取器来构建掩码检测,然后使用支持向量机(SVM) 决策树和叠加集成方法作为分类器的一个快速解释。 为了向研究人员致敬,这个应用程序是基于研究论文,题目是“在2019冠状病毒…

分布式应用:kylin 部署 zabbix 监控平台

目录 一、实验 1.环境 2. kylin 修改mysql数据库 3. kylin 部署 zabbix 监控平台 4. kylin 修改 zabbix 配置 5. kylin 修改zabbix web 二、问题 1. zabbix_server 查看版本报错 2.zabbix_server 文件如何去掉注释"#"和空行 3. zabbix图表显示异常 4.zabbi…

前端常见面试题之vue3

文章目录 1. vue3比vue2有哪些优势2. 描述vue3的生命周期3. 如何看待vue3中的Composition API 和 Options API4. 如何理解ref、 toRef、和toRefs?5. vue3升级了哪些功能6. Composition API如何实现代码逻辑的复用(hook)7. Vue3如何实现响应式的8.Vue3使用Proxy对象…

2-22 方法、面向对象、类、JVM内存、构造方法

文章目录 方法的重载面向对象类、属性和方法成员变量默认值属性JVM简单内存分析栈空间堆空间 构造方法执行过程构造器注意点 方法的重载 一个类中名称相同,但是参数列表不同的方法 参数列表不同是指: 形参类型形参个数形参顺序 面向对象 field —— …

linux系统---防火墙拓展

目录 一、iptables 1.基本语法 2.四表五链——重点记忆 2.1四表 2.2五链 2.3总结 3.iptables选项示例 3.1 -Z 清空流量计数 3.2 -P 修改默认规则 3.3 -D 删除规则 3.4 -R 指定编号替换规则 4.白名单 5.通用匹配 6.示例 6.1添加回环网卡 6.2可以访问端口 6.3 主…

架构设计实践:熟悉架构设计方法论,并动手绘制架构设计图

文章目录 一、架构设计要素1、架构设计目标2、架构设计模式(1)分而治之(2)迭代式设计 3、架构设计的输入(1)概览(2)功能需求 - WH分析法(3)质量 - “怎么”分…

都说了别用BeanUtils.copyProperties,这不翻车了吧

分享是最有效的学习方式。 博客:https://blog.ktdaddy.com/ 故事 新年新气象,小猫也是踏上了新年新征程,自从小猫按照老猫给的建议【系统梳理大法】完完整整地梳理完毕系统之后,小猫对整个系统的把控可谓又是上到可一个新的高度。…

Arduino中安装ESP32网络抽风无法下载 暴力解决办法 python

不知道什么仙人设计的arduino连接网络部分,死活下不下来。(真的沙口,第一次看到这么抽风的下载口) 操作 给爷惹火了我踏马解析json选zip直接全部下下来 把这个大家的开发板管理地址下下来跟后面python放在同一目录下&#xff0c…

【Java程序设计】【C00317】基于Springboot的智慧社区居家养老健康管理系统(有论文)

基于Springboot的智慧社区居家养老健康管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的智慧社区居家养老健康管理系统设计与实现,本系统有管理员、社区工作人员、医生以及家属四种角色权限 管…

理解这几个安全漏洞,你也能做安全测试!

如今安全问题显得越来越重要,一个大型的互联网站点,你如果每天查看日志,会发现有很多尝试攻击性的脚本。 如果没有,证明网站影响力还不够大。信息一体化的背后深藏着各类安全隐患,例如由于开发人员的不严谨导致为Web应…

基于24扇区细分的三电平逆变器异步电机直接转矩控制系统学习

导读:本期文章介绍异步电机三电平24扇区的直接转矩控制。三电平逆变器直接转矩控制中,传统的PWM控制方法存在错判区间等问题。本文在借鉴三电平逆变器单一矢量及合成矢量的直接转矩控制研究和两电平12扇区直接转矩控制的基础上,将两电平12扇区…