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

Spring 中的 BeanFactory 和 ApplicationContext

BeanFactory 是 Spring 框架中最基本的容器接口,定义了 Spring 容器的核心方法,用于管理 Bean 的生命周期和依赖注入。

ApplicationContext 是 BeanFactory 的子接口,提供了更多的功能,如国际化支持、事件传播、自动扫描组件等。因此,会使用ApplicationContext 来代替 BeanFactory。

BeanFactory 的作用
Bean 实例化:根据配置信息或注解定义,创建应用程序中需要的Bean实例。负责解析Bean定义,处理依赖关系,并将Bean实例化为可用的对象。
依赖注入:将所需依赖注入到 Bean 中,确保 Bean 能正确运行。包括设置属性值、调用初始化方法等。
配置和管理:根据配置文件或注解来配置和管理 Bean 实例,提供了各种方法来获取和操作 Bean 实例。
生命周期管理:管理 Bean 的整个生命周期,包括创建、初始化、使用和销毁。

BeanFactory的创建
BeanFactory的创建方式主要包括XML配置方式、Java配置方式和注解配置方式:

XML 配置方式:这是创建 BeanFactory 的传统方式。需要在 XML 配置文件中定义 Bean 的信息,包括 Bean 的名称、类路径、属性等,通过加载配置文件来创建和管理 BeanFactory 。
Java配置方式:在 Java 类中定义 Bean 的创建和依赖关系,通过配置类来创建和管理 BeanFactory。通常涉及到使用 @Configuration 注解来标识配置类,并使用 @Bean 注解来定义 Bean 的实例化、配置和管理信息。
注解配置方式:在 Java 类上添加相应的注解来标识该类是一个 Bean,并进行相应的配置信息。Spring 会自动扫描并创建相应的 Bean,并将其添加到 ApplicationContext 中,AnnotationConfigApplicationContext 作为其子类,同样支持注解配置方式。 

 

ApplicationContext 的作用
Bean 的创建和管理:负责实例化和管理应用中的所有 Bean ,包括它们的创建、配置、生命周期管理等。提供了对 Bean 的访问和控制,使得 Bean 之间的依赖关系可以通过依赖注入的方式轻松实现。
依赖注入:支持依赖注入,允许 Bean 轻松地获取其依赖的其他 Bean。
国际化支持:根据不同的语言环境加载不同的资源文件实现多语言。通过继承 MessageSource 接口来支持消息解析和国际化。
事件传播:可以发布事件,并允许其他组件注册监听器来处理这些事件,这种机制实现了组件之间的解耦。
资源加载:提供了一个统一的接口,可以方便的加载和管理各种资源,如配置文件、XML 文件、Properties 文件等。
面向切面编程:提供了对 AOP 的支持,允许通过配置切面来实现横切关注点的模块化。
中央接口:为应用程序提供配置的中央接口,在应用程序运行时这是只读的,但如果实现支持这一点,则可以重新加载。
继承性:后代上下文中的定义总是优先于父上下文中的定义,这意味着单个父上下文可以被整个 web 应用共享。
2、ApplicationContext 的实现类
ClassPathXmlApplicationContext:从类路径中获取上下文定义文件,适用于测试工具以及嵌入在 jar 中的应用程序上下文。
FileSystemXmlApplicationContext:从文件系统或 URL 获取上下文定义文件,适用于独立的应用程序。
AnnotationConfigApplicationContext:在 Spring 3.0 中引入,允许通过 Java 配置类来配置应用程序上下文,与 @Configuration 、@Component 等注解一起工作。
 

http://www.sczhlp.com/news/901/

相关文章:

  • Umi 约定式路由解析
  • SFUD库应用教程:串行SPI Flash驱动开发的最佳实践
  • 【刷题笔记】Peaks
  • spring security
  • required关键字和特性的区别
  • 详细介绍:理想不再“追星”华为。
  • C++小白修仙记_LeetCode刷题_1.两数之和
  • synchronized底层实现是什么 lock底层是什么 有什么区别
  • iOS 性能监控 苹果手机后台运行与能耗采样实战指南
  • pygame小游戏打飞机_1展示窗口
  • 个人版Navicat17 Lite版本安装教程(附安装包)2025最新版详细图文安装教程
  • Fluent许可状态监控工具
  • 链上充值监听与自动划转资金流程实现 - fox
  • 如何缓解Petya和WannaCrypt等快速网络攻击 | MSRC博客
  • 基于Amazon Translate的深度学习教材自动翻译系统
  • AI视频自动剪辑大师 v5.0 绿色版
  • 文件完整性校验工具 CHK 5.51 绿色中文版
  • 2025年7月26日,工信部人才交流中心 CUUG - PGCP/PGCM认证考试完成!
  • 2025.7.28暑假集训第一次普及组训练总结
  • 入职—员工体验的关键时刻,看AI Agent如何将体验值、效率值双双拉满
  • 寻疗智慧 IOT 数字健康服务平台
  • 铭芯科技共享轮椅租赁系统
  • 新视角问诊通
  • 寻医问药小程序系统
  • c# ACME client
  • 「闲聊文」准大三的我,思前想后还是不搞java了 - crhl
  • xxx.app 已损坏,无法打开,你应该将它移到废纸篓/打不开 xxx,因为它来自身份不明的开发者解决方法
  • OI 数学定理(提高级)
  • 智慧在线医疗 APP
  • 阿里云正式开源 LoongSuite:打造 AI 时代的高性能低成本可观测采集套件