Spring中的工厂类ApplicationContext和BeanFactory

news2025/1/12 20:47:09

1.ApplicationContext

ApplicationContext的实现类,如下图

 

  • ClassPathXmlApplicationContext:加载类路径下 Spring 的配置文件

  • FileSystemXmlApplicationContext:加载本地磁盘下 Spring 的配置文件

ApplicationContext由BeanFactory派生而来,提供了更多面向实际应用的功能。在BeanFactory中,很多功能需要以编程的方式实现,而在ApplicationContext中则可以通过配置实现。

ApplicationContext:是IOC容器另一个重要接口, 它继承了BeanFactory的基本功能, 同时也继承了容器的高级功能,如:MessageSource(国际化资源接口)、ResourceLoader(资源加载接口)、ApplicationEventPublisher(应用事件发布接口)等。

基本代码:

  public static void main(String[] args) {
        // 创建ApplicationContext并加载配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

        // 获取Bean
        HelloWorld helloWorld = (HelloWorld) context.getBean("helloWorld");

        // 使用Bean
        helloWorld.printMessage();
    }

2.BeanFactory

spring中工厂的类结构图:

BeanFactory 是Spring框架的最基本容器,它提供了一种延迟初始化Bean的机制。这意味着只有在需要时,Bean才会被实例化。BeanFactory 的主要职责是:

  • 加载Bean的配置信息。
  • 实例化Bean。
  • 维护Bean的生命周期。
  • 注入Bean之间的依赖关系。

基本代码:

 public static void main(String[] args) {
        // 创建BeanFactory并加载配置文件
        BeanFactory factory = new XmlBeanFactory(new ClassPathResource("beans.xml"));

        // 获取Bean
        HelloWorld helloWorld = (HelloWorld) factory.getBean("helloWorld");

        // 使用Bean
        helloWorld.printMessage();
    }

 

3. 二者区别

  1. 延迟加载 vs. 预先加载: BeanFactory 采用延迟加载策略,只有在需要时才会实例化Bean。而 ApplicationContext 在容器启动时就会实例化所有的Bean。
  2. 功能扩展: ApplicationContext 提供了更多的企业级功能,如国际化、事件传播、资源加载等。它是BeanFactory 的一个扩展版本,适用于更复杂的应用程序。
  3. 性能: 由于 ApplicationContext 预先实例化所有的Bean,因此在启动时可能会有一些性能开销。相比之下,BeanFactory 的性能可能更好,因为它只在需要时才实例化Bean。
  4. 使用场景: 如果您的应用程序较小且对性能要求较高,可以使用BeanFactory。如果您需要更多的企业级功能或希望在启动时立即初始化Bean,可以使用ApplicationContext。

 代码展示:

        ApplicationContext ac =new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService = ac.getBean("Service", UserService.class);
        System.out.println("Spring IOC容器创建好了");
        BeanFactory beanFactory1= new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
        beanFactory1.getBean("Service",UserService.class);
        System.out.println("第二个Spring IOC容器创建好了");
        BeanFactory beanFactory2= new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
        System.out.println("第三个Spring IOC容器创建好了");

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文件归类妙招:用关键字替换改扩展名方法,文件重命名技巧

在日常工作中,文件的数量会随着时间的推移不断增加。如果文件没有得到适当的归类和整理,就会导致很难找到所需的文件。所以文件归类是非常重要的任务。现在来看云炫文件管理器一些实用的文件归类妙招:用关键字替换修改文件扩展名的方法&#…

【计算机毕业设计】SSM在线化妆品网站

项目介绍 本项目为前后台项目,前台为普通用户登录,后台为管理员登录; 管理员角色包含以下功能: 管理员登录,分类管理,产品管理,用户管理,订单管理等功能。 用户角色包含以下功能: 提交订单,用户登录,用户首页,查看…

程序性能优化全能手册

本文聊一个程序员都会关注的问题:性能。 当大家谈到“性能”时,你首先想到的会是什么? 是每次请求需要多长时间才能返回? 是每秒钟能够处理多少次请求? 还是程序的CPU和内存使用率高不高? 这些问题基本上…

3d全景怎么拍摄?应用领域有哪些?

3d全景技术是综合了VR技术和全景拍摄的一种新型应用技术,通过3D全景技术可以为用户带来720度无死角的观看方式和真实的观看体验,那么3d全景是怎么拍摄制作的呢?应用领域又有哪些呢? 3d全景拍摄制作流程其实不难,常见的…

基于日照时数计算逐日太阳辐射

基于日照时数计算逐日太阳辐射

ffmpeg.c(4.3.1)源码剖析

文章目录 前言一、FFmpeg 源码结构图二、ffmpeg.h 头文件详解三、main 函数主要流程分析四、ffmpeg_parse_options1、命令行例子①、解析命令行 split_commandline()②、parse_optgroup()③、MATCH_PER_XXX_OPT() 2、vf 选项解析①、filters②、vf 术语③、avfilter_graph_pars…

分布式协调系统

分布式协调系统 分布式协调系统解决的进程间的通信和协作,根据是否在同一时间和是否相互引用分为四个模型。 示例系统Chubby 主功能:让客户端实现同步,方法是加锁服务 介绍一下系统: 系统由五台服务器构成,通过pax…

Java:Lambda表达式、方法引用

文章目录 1、Lambda表达式1.1 Lambda表达式体验1.2 Lambda表达式的省略形式1.3 Lambda表达式练习 2、方法引用体验3、方法引用符4、引用静态方法5、引用对象的实例方法6、引用类的实例方法7、引用构造方法8、引用数组的构造方法9、方法引用练习9.1 练习19.2 练习29.3 练习3 10、…

CAN通信的基本原理与实现方法

一. CAN协议概念 1.1 CAN 协议简介 CAN 是控制器局域网络 (Controller Area Network) 的简称,它是由研发和生产汽车电子产品著称的德国 BOSCH 公司开发的,并最终成为国际标准(ISO11519以及ISO11898),是国际上应用最广泛的现场总线之一。差异点如下&…

​三子棋(c语言)

前言: 三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏规则是双方对战,双方依次在9宫格棋盘上摆放棋子,率先将自己的三个棋子走成一条线就视为胜利。但因棋盘太小,三子棋在很多时候会出现和…

【CentOS 7.9】安装搜狗输入法教程

总览 1.如何在 centos7.x 中使用 搜狗输入法 一、安装依赖 1.切换至 root 用户 su root2.更新 yum yum update3.卸载 ibus rpm -e --nodeps ibus4.安装 epel 源 yum -y install epel-release5.安装 fcitx 环境、qtwebkit包 和 alien 转换工具等(可以将 .deb …

静态网页设计——旅游景点介绍(HTML+CSS+JavaScript)

前言 声明:该文章只是做技术分享,若侵权请联系我删除。!! 感谢大佬的视频: https://www.bilibili.com/video/BV1f64y1N7uH/?vd_source5f425e0074a7f92921f53ab87712357b 使用技术:HTMLCSSJS(…

系列十一、(三)Sentinel控制台

一、Sentinel控制台 二、实时监控 2.1、概述 实时监控,顾名思义是用来实时监控的,具体监控的是接口请求通过的QPS和拒绝的QPS,默认情况下没有访问记录,所以看不到任何记录,需要访问接口才会有记录。另外需要注意&…

[4K80 AI ISP IPC芯片]

4K80 AI ISP IPC芯片 Hi3403V100是一颗面向监控市场推出的专业 Ultra-HD Smart IP Camera SOC,该芯片最高支持四路sensor输入,支持最高4K60的ISP图像处理能力,支持3F WDR加粗样式、多级降噪、六轴防抖、硬件拼接等多种图像增强和处理算法&am…

easyrecovery16 (硬盘数据恢复软件)免费版

EasyRecovery是由球著名数据厂商Kroll Ontrack出品的一款便捷实用,功能强大的硬盘数据恢复软件。它能够全面恢复删除丢失数据,支持包括文档、表格、图片、音视频等各种文件类型。支持恢复不同存储介质数据:硬盘、光盘、U盘/移动硬盘、数码相机…

Vue3-35-路由-路由守卫的简单认识

什么是路由守卫 路由守卫,就是在 路由跳转 的过程中, 可以进行一些拦截,做一些逻辑判断, 控制该路由是否可以正常跳转的函数。常用的路由守卫有三个 : beforeEach() : 前置守卫,在路由 跳转前 就会被拦截&…

C++学习笔记——类作用域和抽象数据类型

目录 一、C类作用域 类内作用域 类外作用域 二、类作用域案列详细的解释说明 三、抽象数据类型 四、总结 类作用域 抽象数据类型(ADT) 五、图书馆管理系统 一、C类作用域 在C中,类作用域是指类定义中声明的标识符(成员变…

【SpringCloud】之远程消费(进阶使用)

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《SpringCloud开发之远程消费》。🎯&a…

Linux第12步_磁盘重新分区

解决“挂载后的U盘出现中文乱码”后,我们接着学习“磁盘重新分区”,熟悉fdisk命令。 1、删除磁盘的分区 输入“cd /回车”,进入根目录 输入“ls /dev/sd*回车”,显示dev以sd所有文件。 输入“sudo fdisk /dev/sdb1回车” 输入…

瑜亮之争有结果了,6GHz(6425-7125MHz)全部或部分频段划分用于IMT系统

文章目录 6GHz(6425-7125MHz)全部或部分频段划分用于IMT系统Wi-Fi 7 使用的频段Wi-Fi 7 与IMT使用的频段存在重叠频谱分配有讲究6GHz频段未来如何利用如何看待6GHz频段划入IMT关于Wi-Fi 7 与IMT关于Wi-Fi 7(IEEE 802.11be EHT)关于IMT(International Mob…