【Spring】03 容器

文章目录

      • 1. 定义
      • 2. BeanFactory
        • 1)惰性加载
        • 2)基本的容器功能
        • 3)XML配置
      • 3. ApplicationContext
        • 1)主动加载
        • 2)AOP支持
        • 3)事件发布与监听
        • 4)国际化支持
        • 5)注解支持
      • 4. Spring容器的生命周期
        • 1)启动阶段
        • 2)运行阶段
        • 3)关闭阶段
      • 5. Spring容器的工作原理
        • 1)定位配置文件
        • 2)加载配置文件
        • 3)实例化Bean
        • 4)注入依赖
        • 5)初始化Bean
        • 6)提供服务
        • 7)销毁Bean
      • 结语

1. 定义

Spring 容器是 Spring 框架的核心组件之一,负责管理和维护应用中的所有Bean。

它通过依赖注入的方式,将 Bean 之间的依赖关系交给容器管理,实现了控制反转(IoC)的设计原则。Spring容器主要有两种类型:BeanFactoryApplicationContext

2. BeanFactory

BeanFactory 是 Spring 框架最基本的容器接口,提供了基本的容器功能。

在这里插入图片描述

它的主要特性包括:

1)惰性加载

BeanFactory 采用惰性加载的方式,即在需要使用 Bean 时才进行加载。这样可以降低系统的启动时间和资源消耗,适用于较大规模的应用。

2)基本的容器功能

BeanFactory 提供了最基本的容器功能,包括 Bean 的实例化、配置、管理和生命周期的控制。它是其他容器类型的基础。

3)XML配置

BeanFactory 通常通过 XML 配置文件来定义和配置 Bean。配置文件中描述了Bean的类型、属性和依赖关系等信息。

<bean id="userService" class="org.example.cheney.UserService"><property name="userDao" ref="userDao"/>
</bean>

3. ApplicationContext

ApplicationContext 是对 BeanFactory 的扩展,提供了更多的企业级特性。它是Spring应用中更常用的容器类型,组合了一堆功能接口。

在这里插入图片描述

它具有以下优点:

1)主动加载

ApplicationContext 采用主动加载的方式,即在应用启动时就将所有的 Bean 加载到容器中。这样可以更早地发现潜在的配置问题,提高系统的稳定性。

2)AOP支持

ApplicationContext 支持面向切面编程(AOP),可以通过配置实现横切关注点的功能,例如日志记录、事务管理等。

3)事件发布与监听

ApplicationContext 允许 Bean 之间通过事件进行通信。一个 Bean 可以发布事件,而其他 Bean 可以注册监听器以响应这些事件。

4)国际化支持

ApplicationContext 提供了对国际化的支持,可以轻松地实现多语言应用程序。

5)注解支持

ApplicationContext 支持通过注解进行 Bean 的定义和注入,使得配置更加简洁和可读。

@Configuration
public class AppConfig {@Beanpublic UserService userService() {return new UserService();}
}

4. Spring容器的生命周期

Spring 容器的生命周期包括启动、运行和关闭三个阶段。

在这里插入图片描述

1)启动阶段

在启动阶段,Spring 容器会读取配置文件,实例化并初始化所有配置的 Bean。这包括 Bean 的实例化、属性注入、初始化方法的调用等过程。

2)运行阶段

在运行阶段,Spring 容器接受外部的请求,提供 Bean 的服务。当应用需要某个 Bean 时,容器会负责将该 Bean注入到需要的地方,满足应用的依赖关系。

3)关闭阶段

在关闭阶段,Spring 容器执行一些清理工作,确保应用的正常关闭。这包括调用所有 Bean 的销毁方法、释放资源等。

5. Spring容器的工作原理

Spring 容器的工作原理可以总结为以下几个步骤:

1)定位配置文件

容器首先需要找到应用的配置文件,该文件通常是一个 XML 文件,其中包含了 Bean 的定义和配置信息。

2)加载配置文件

一旦找到配置文件,容器会负责将配置文件加载到内存中,解析其中的 Bean 定义和相关配置。

3)实例化Bean

容器根据配置文件中的定义,实例化 Bean 对象。这包括调用构造函数、设置属性值等步骤。

4)注入依赖

容器通过依赖注入的方式,将 Bean 之间的依赖关系注入到各个 Bean 中。这可以通过构造函数注入、Setter 方法注入、接口注入等方式实现。

5)初始化Bean

一旦依赖关系注入完成,容器会调用 Bean 的初始化方法。这可以通过配置文件中的 init-method 属性、@PostConstruct 注解等方式指定。

6)提供服务

在 Bean 初始化完成后,容器就开始提供服务。应用程序可以通过容器获取需要的 Bean,实现业务逻辑。

7)销毁Bean

当应用程序关闭时,容器会执行一些清理工作,包括调用所有 Bean 的销毁方法、释放资源等。

结语

Spring 容器作为 Spring 框架的核心,承担了管理应用中所有组件的重要责任。通过依赖注入和控制反转等特性,Spring 容器实现了松散耦合、可维护、可测试的设计原则。深入了解 Spring 容器的工作原理和使用方法,对于提高应用程序的质量和开发效率具有重要意义。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

严世芸龟法养生经

文章目录 严世芸理念荤素搭配&#xff0c;不偏嗜动静结合心平气和 龟息法 严世芸 严世芸&#xff0c;出生于1940年&#xff0c;现任上海中医药大学的主任医师&#xff0c;教授。他父亲是近代上海有名的中医&#xff0c;他又是著名医家张伯臾的亲传弟子。 从小就在父亲诊室里长…

Navicat 技术指引 | 适用于 GaussDB 分布式的日志查询与配置设置

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结…

phpy 连接 PHP与Python生态 跨界合作 PHPY搭建 已解决

目录 需求介绍 安装 windows版本 文件地址 运行效果 需求介绍 在日常功能开发中&#xff0c;难免会使用python的计算库&#xff0c;同时自己要是一名PHP开发工程师。就在最近有相应的需求&#xff0c;索性使用phpy来进行功能开发 安装 windows版本 phpy 是识沃团队最新推出…

【设计模式--结构型--桥接模式】

设计模式--结构型--桥接模式 桥接&#xff08;Bridge&#xff09;模式定义结构案例好处使用场景 桥接&#xff08;Bridge&#xff09;模式 定义 将抽象与实现分离&#xff0c;使他们可以独立变化。它是用组合关系代替继承关系来实现&#xff0c;从而降低了抽象和实现这两个维…

红帽认证RHCE9.0版本2023年12月的红帽9.0版本RHCSA题⽬+答案,本人已过,全国通用

红帽认证9版本2023年12月的红帽9.0版本RHCSA题⽬答案&#xff0c;本人已过&#xff0c;全国通用 需要完整的RHCSA和RHCE的考试答案的题目以及RHCE9考试的模拟环境和考试笔记教材的请添加微信&#xff0c;需备注来自csdn&#xff0c;不然通不过 1、配置⽹络设置? 将?node1?…

docker-harbor的私有仓库

目录 harbor的特性 harbor的组件 docker-harbor部署 Docker1 页面访问 ​编辑 上传镜像 创建项目 创建用户 给项目创建成员 上传私有仓库 docker2(远程主机上传) 如何实现仓库之间进行同步 docker3 实现远程仓库同步 仓库 保存镜像 私有&#xff0c;自定义用户…

音视频技术开发周刊 | 323

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 Meta牵头组建开源「AI复仇者联盟」&#xff0c;AMD等盟友800亿美元力战OpenAI英伟达 超过50家科技大厂名校和机构&#xff0c;共同成立了全新的人工智能联盟。以开源为旗号…

C之不小心就犯错误1

以为会打印&#xff1a; it is ok 然而并不是&#xff1a; 原因&#xff1a; 根据C语言隐式类型转换的原理&#xff0c;如果是int型与uint型进行比较&#xff08;其它类型同理&#xff09;&#xff0c;则会将int型数据转换为uint型&#xff0c;则-1变成了 2^32-1 429496729…

qt-C++笔记之addAction和addMenu的区别以及QAction的使用场景

qt-C笔记之addAction和addMenu的区别以及QAction的使用场景 code review! 文章目录 qt-C笔记之addAction和addMenu的区别以及QAction的使用场景1.QMenu和QMenuBar的关系与区别2.addMenu和addAction的使用场景区别3.将QAction的信号连接到槽函数4.QAction的使用场景5.将例1修改…

编译和使用WPS-ghrsst-to-intermediate生成SST

一、下载 V1.0 https://github.com/bbrashers/WPS-ghrsst-to-intermediate/tree/masterV1.5&#xff08;使用过程报错&#xff0c;原因不详&#xff0c;能正常使用的麻烦告知一下方法&#xff09; https://github.com/dmitryale/WPS-ghrsst-to-intermediate二、修改makefile…

AI人工智能在建筑智能化工程设计的应用

AI人工智能在建筑智能化工程设计的应用 相关政策&#xff1a; 建筑智能化工程设计资质是为了合理设计各种智能化系统&#xff0c;让它们有机地结合成为有效的整体作用。在工程设计标准中&#xff0c;智能化资质设计全称为建筑智能化系统专项设计资质。企业一旦具备智能化设计资…

世微 AP5199降压恒流驱动IC 4--450V 6A调光 恒流源LED驱动器

AP5199LED驱动器 描述 AP5199是以恒定关断时间模式操作的平均电流模式控制LED驱动器IC。不像 AP5160&#xff0c;这种控制IC不会产生峰均误差&#xff0c;因此大大提高了精度、线性和 LED电流的负载调节&#xff0c;而不需要任何环路补偿或高侧电流感测。这个 输出LED电流精度为…

设计模式-门面模式(Facade)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、定义二、结构 前言 在组件构建过程中&#xff0c;某些接口之间直接依赖会带来很多问题&#xff0c;甚至无法直接实现。采用一层间接接口&#xff0c;来隔离…

数据分享 I 全国市级商品房屋销售数据,shp/excel格式,2005-2020年数据

基本信息. 数据名称: 全国市级商品房屋销售数据 数据格式: Shp、excel 数据时间: 2005-2020年 数据几何类型: 面 数据坐标系: WGS84坐标系 数据来源&#xff1a;网络公开数据 数据字段&#xff1a; 序号字段名称字段说明1spxse商品房销售额&#xff08;亿元&#xf…

使用Mockjs模拟(假数据)接口(axios)

一、什么是MockJs Mock.js官网 Mock.wiki.git mock测试就是在测试过程中&#xff0c;对于某些不容易构造或者不容易获取的对象&#xff0c;用一个虚拟的对象来创建以便测试的测试方法。 二、安装mockjs npm install mockjs 三、 MockJs使用 简单使用&#xff1a; // 使用…

深度探索Linux操作系统 —— Linux图形原理探讨

系列文章目录 深度探索Linux操作系统 —— 编译过程分析 深度探索Linux操作系统 —— 构建工具链 深度探索Linux操作系统 —— 构建内核 深度探索Linux操作系统 —— 构建initramfs 深度探索Linux操作系统 —— 从内核空间到用户空间 深度探索Linux操作系统 —— 构建根文件系统…

k8s详细教程(一)

—————————————————————————————————————————————— 博主介绍&#xff1a;Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 &#x1f345;文末获取源码…

HBase 详细图文介绍

目录 一、HBase 定义 二、HBase 数据模型 2.1 HBase 逻辑结构 2.2 HBase 物理存储结构 ​2.3 数据模型 2.3.1 Name Space 2.3.2 Table 2.3.3 Row 2.3.4 Column 2.3.5 Time Stamp 2.3.6 Cell 三、HBase 基本架构 架构角色 3.1 Master 3.2 Region Server 3.3 Zo…

【web安全】文件读取与下载漏洞

前言 菜某整理仅供学习&#xff0c;有误请赐教。 概念 个人理解&#xff1a;就是我们下载一个文件会传入一个参数&#xff0c;但是我们可以修改参数&#xff0c;让他下载其他的文件。因为是下载文件&#xff0c;所以我们可以看到文件里面的源码&#xff0c;内容。 文件读取…

vue文件下载请求blob文件流token失效的问题

页面停留很久token失效没有刷新页面&#xff0c;这时候点击下载依然可以导出文件&#xff0c;但是文件打不开且接口实际上返回的是401&#xff0c;这是因为文件下载的方式通过window创建a标签的形式打开的&#xff0c;并没有判断token失效问题 const res await this.$axios.…