【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.mzph.cn/news/231624.shtml

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

相关文章

万兆网络之线路测速

网络测速有很多种方式&#xff0c;建议使用开源的iperf搭建测试 官方&#xff1a;iperf3&#xff08;技术网站一般不被和谐&#xff0c;有部分可能被污染&#xff09; Windows下载后解压即可运行 小技巧&#xff1a;如果你用的笔记本只有一个C盘&#xff0c;最好将免安装的软…

数据库sql语句查询补充

数据库sql语句查询补充 0.前言1.Like谓语2.带有Having当中的分组查询eg. 例题:错题重做: 3.内连接例题 0.前言 数据库期末复习,对自己做错的题进行知识总结和梳理 1.Like谓语 like谓语主要有两个操作 %:百分号,表示任意长度的字符串_:下划线,表示任意单个字符 like谓语的语…

Python学习之复习MySQL-Day8(事务)

目录 文章声明⭐⭐⭐让我们开始今天的学习吧&#xff01;事务简介事务操作模拟转账操作开启事务提交事务回滚事务查看/设置事务提交方法实例演示 事务四大特性并发事务问题分类 事务隔离级别分类查看/设置事务隔离级别实例演示 文章声明⭐⭐⭐ 该文章为我&#xff08;有编程语…

TrustZone之顶层软件架构

在处理器中的TrustZone和系统架构中,我们探讨了硬件中的TrustZone支持,包括Arm处理器和更广泛的内存系统。本主题关注TrustZone系统中发现的软件架构。 一、顶层软件架构 下图显示了启用TrustZone的系统的典型软件栈: 【注意】:为简单起见,该图不包括管理程序,尽管它们可…

福德植保无人机工厂:创新科技与绿色农业的完美结合

亲爱的读者们&#xff0c;欢迎来到福德植保无人机工厂的世界。这里&#xff0c;科技与农业的完美结合为我们描绘出一幅未来农业的新篇章。福德植保无人机工厂作为行业的领军者&#xff0c;以其领先的无人机技术&#xff0c;创新的理念&#xff0c;为我们展示了一种全新的农业服…

【Filament】绘制矩形

1 前言 Filament环境搭建中介绍了 Filament 的 Windows 和 Android 环境搭&#xff0c;绘制三角形中介绍了绘制纯色和彩色三角形&#xff0c;本文将使用 Filament 绘制纯色和彩色矩形。 2 绘制矩形 本文项目结构如下&#xff0c;完整代码资源 → Filament绘制矩形。 2.1 自定义…

4.1 媒资管理模块 - Nacos与Gateway搭建

文章目录 媒资管理模块 - 媒资项目搭建一、需求分析1.1 介绍1.2 数据模型1.3 分析网关 二、 搭建Nacos2.1 服务发现中心2.2.1 Maven2.2.2 配置Nacos 2.2 配置中心2.2.1 介绍2.2.2 Maven 坐标2.2.3 配置 content-api 工程2.2.4 配置 content-service 工程2.2.5 配置 system-api …

玩转Docker(六):数据挂载与共享

文章目录 〇、Docker的两种存放数据的资源1.Storage Driver2.Data Volume3.使用场景 一、使用Data Volume1.-v <host_path>:<container_path>2.-v <container_path>挂载匿名卷 二、数据共享1.容器和主机之间共享2.容器之间共享(1)方法一&#xff1a;-v非匿名…

Spark编程实验二:RDD编程初级实践

目录 一、目的与要求 二、实验内容 三、实验步骤 1、pyspark交互式编程 2、编写独立应用程序实现数据去重 3、编写独立应用程序实现求平均值问题 4、三个综合实例 四、结果分析与实验体会 一、目的与要求 1、熟悉Spark的RDD基本操作及键值对操作&#xff1b; 2、熟悉使…

Linux-----21、挂载

# 挂载命令 将硬件资源&#xff0c;或文件资源&#x1f4bf;&#xff0c;和&#x1f4c2;空目录&#x1f517;连接起来的过程 # mount linux 所有存储设备都必须挂载使用&#xff0c;包括硬盘 ​ 命令名称&#xff1a;mount ​ 命令所在路径&#xff1a;/bin/mount ​ 执行…

得帆信息创始人-张桐,受邀出席 BV百度风投AIGC主题论坛

近日&#xff0c;得帆信息创始人兼CEO张桐&#xff0c;作为百度风投被投代表企业创始人受邀出席“向未来&#xff0c;共成长” BV百度风投AIGC主题论坛。 与包括上海市徐汇区相关部门领导、百度集团相关事业部负责人及代表&#xff0c;以及来自国寿资本、中网投、麦顿投资的投资…

如何让32位.Net 应用打开3G开关

昨天刚分享了《如何让.NET应用使用更大的内存》&#xff0c;结果就有同学说&#xff0c;<最好加一下32位如何开启大内存&#xff0c;因为很多传统项目32位&#xff0c;实在迁移不动了>&#xff0c;那么&#xff0c;我就验证了一些可行的方案&#xff0c;发现都挺简单的。…

内网安全—Windows系统内核溢出漏洞提权

系统内核溢出漏洞提权 往缓冲区中写入超出限定长度的内容&#xff0c;造成缓冲区溢出&#xff0c;从而破坏程序的堆栈进而运行自己精心准备的指定代码&#xff0c;达到攻击的目的。 分类&#xff1a; 堆溢出 栈溢出 查找补丁的方法 1、手工查找补丁情况 systeminfo Wmic qfe…

Semaphore学习一

一、定义 是JUC包下的一个工具类&#xff0c;我们可以通过其限制执行的线程数量&#xff0c;达到限流的效果。 当一个线程执行时先通过其方法进行获取许可操作&#xff0c;获取到许可的线程继续执行业务逻辑&#xff0c;当线程执行完成后进行释放许可操作&#xff0c;未获取达到…

Python 全栈体系【四阶】(七)

第四章 机器学习 六、多项式回归 1. 什么是多项式回归 线性回归适用于数据呈线性分布的回归问题。如果数据样本呈明显非线性分布&#xff0c;线性回归模型就不再适用&#xff08;下图左&#xff09;&#xff0c;而采用多项式回归可能更好&#xff08;下图右&#xff09;。例…

数据安全传输基础设施平台(二)

5安全传输平台总体设计 5.1 方案特点 规范化&#xff1a;严格遵循各种相关规范设计。独立性&#xff1a;系统各子系统间互相独立&#xff0c;在保持系统间接口的前提下&#xff0c;各系统间的升级互不干扰。最小耦合性&#xff1a;各子系统进行严格功能分解&#xff0c;每个子…

PCL点云处理之点云置平(拟合平面绕中心旋转到绝对水平)(二百二十七)

PCL点云处理之点云置平(绕中心旋转到绝对水平)(二百二十七) 一、什么是点云置平二、算法流程三、算法实现一、什么是点云置平 有时候,我们处理的点云平面并非位于水平面,而是位于某个任一三维平面上,而大多数算法又只能在水平面处理,或者水平面的点云处理是相对更简单…

P2P应用

目录 一.P2P的简介 二.P2P的工作方式 1.具有集中目录服务器的P2P工作方式 2.具有全分布式结构的P2P文件共享程序 一.P2P的简介 P2P(对等连接)&#xff0c;是指两台主机在通信时&#xff0c;并不区分哪一个是服务请求方和哪一个是服务提供方。只要两台主机都运行了对等连接…

人工智能_机器学习069_SVM支持向量机_网格搜索_交叉验证参数优化_GridSearchCV_找到最优的参数---人工智能工作笔记0109

然后我们再来说一下SVC支持向量机的参数优化,可以看到 这次我们需要,test_data这个是测试数据,容纳后 train_data这个是训练数据 这里首先我们,导出 import numpy as np 导入数学计算包 from sklearn.svm import SVC 导入支持向量机包 分类器包 def read_data(path): wit…

从事开发近20年,经历过各种技术的转变和进步

1、jsp、javabean、servlet、jdbc。 2、Struts1、hibernate、spring。 3、webwork、ibatis、spring 4、Struts2、mybatis、spring 5、spring mvc &#xff0c;spring全家桶 6、dubbo&#xff0c;disconf 微服务&#xff0c;soa 7、springboot 全家桶 8、docker 9、dock…