【Spring】03 容器

news2024/12/23 6:53:37

文章目录

      • 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 {
    @Bean
    public 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.coloradmin.cn/o/1310929.html

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

相关文章

正则表达式(6):分组与后向引用

正则表达式&#xff08;6&#xff09;&#xff1a;分组与后向引用 总结 本博文转载自 在本博客中&#xff0c;”正则表达式”为一系列文章&#xff0c;如果你想要从头学习怎样在Linux中使用正则&#xff0c;可以参考此系列文章&#xff0c;直达链接如下&#xff1a; 在Linux中…

ThinkPHP连接ORACLE数据库教程

目录 概念基本步骤详细操作问题排除参考 概念 要连接Oracle数据库&#xff0c;必须有两个东西&#xff0c;一个PHP官方写的扩展&#xff0c;一个Oracle官方写的客户端PHP是通过扩展去操作oralce客户端连接的服务端数据库&#xff0c;所以两个都不能少&#xff0c;而且版本必须…

arthas统计大循环方法时的注意事项

背景 arthas是我们日常查找各种问题的利器&#xff0c;不过我们也需要意识到arthas本身也是有性能损耗的&#xff0c;所以当老板对你提问为什么使用arthas分析时这个方法比生产上正常运行时这个方法的耗时要长很多&#xff0c;你可以向他进行解释&#xff0c;进而由于arthas的…

边缘检测@获取labelme标注的json黑白图掩码mask

import cv2 as cv import numpy as np import json import os from PIL import Imagedef convertPolygonToMask(jsonfilePath):

MySQL——数据类型

目录 一.数据类型分类 二. 数值类型 1.tinyint类型 2.bit类型 3.float类型 4.decimal 三.字符串类型 1.char 2.varchar 四.日期和时间类型 五.enum和set 一.数据类型分类 关于数据库的数据类型有非常多&#xff0c;但是并非所有的数据类型都是我们常用的&#xff…

《信息技术时代》期刊杂志论文发表投稿

《信息技术时代》期刊收稿方向&#xff1a;通信工程、大数据、计算机、办公自动化、信息或计算机教育、电子技术、系统设计、移动信息、图情信息研究、人工智能、智能技术、信息技术与网络安全等。 刊名&#xff1a;信息技术时代 主管主办单位&#xff1a;深圳湾科技发展有限…

vs2019比较两个代码的区别方法

vs2019比较两个代码的区别方法 效果代码 效果 代码 Tools.DiffFiles 3d_mig(1).c 3d_mig_xin0.c

UDP内网穿透和打洞原理与代码实现

1、众所周知&#xff0c;现在主流网络用的还是IPV4协议&#xff0c;理论上一共有2^3243亿个地址&#xff0c;除去私有网段、网络ID、广播ID、保留网段、本地环回127.0.0.0网段、组播224.0.0.0网段、实际可用就是36.47亿个&#xff1b;全球的服务器、PC机、手机、物联网设备等需…

08.CSS盒模型

CSS盒模型 1.介绍 CSS 会把所有的 HTML 元素都看成一个盒子&#xff0c;所有的样式也都是基于这个盒子 2.盒模型构成 介绍 margin&#xff08;外边距&#xff09;&#xff1a;盒子与外界的距离border&#xff08;边框&#xff09;&#xff1a;盒子的边框padding&#xff0…

美国如果把根域名服务器封了,中国不会从网络上消失

目录 美国如果把根域名服务器封了&#xff0c;中国不会从网络上消失为什么根服务器最多13个 输入URL后发生了什么 参考 https://www.yuque.com/fcant/network/vhyvik#AuOqk 美国如果把根域名服务器封了&#xff0c;中国不会从网络上消失 来源&#xff1a; https://segmentfau…

TwinCAT3 Modbus-TCP Client/Server使用

目录 一、环境配置和准备 1、PLC中安装TF6250-Modbus-TCP库 2、勾选TF6250的license 3、PLC工程中添加Tc2_ModbusSrv库文件 4、分别创建测试ModbusTCP测试的Server和Client程序 二、PLC作为Client端 1、设置测试电脑IP地址 2、运行MobusTCP测试工具 3、PLC端程序编写 …

基于C/C++的rapidxml加载xml大文件 - 下部分

下载地址: RapidXml (sourceforge.net)https://rapidxml.sourceforge.net/ 将源码添加到自己的工程中 示例测试大文件耗时: 总共293w行数据&#xff0c;大概耗时不到1s。

将创建表字段语句快速转换成golang struct字段

用网页jquery快速生成 本地建立 struct.html <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>leo-转换</title> <script src"https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></s…

基于YOLOv7算法的高精度实时足球目标检测识别系统(PyTorch+Pyside6+YOLOv7)

摘要&#xff1a;基于YOLOv7算法的高精度实时足球目标检测系统可用于日常生活中检测与定位足球目标&#xff0c;此系统可完成对输入图片、视频、文件夹以及摄像头方式的目标检测与识别&#xff0c;同时本系统还支持检测结果可视化与导出。本系统采用YOLOv7目标检测算法来训练数…

scripty妙用

在monorepo项目中&#xff0c;随着子模块增多&#xff0c; 每个子项目都需要配置各自的package.json,并且大同小异&#xff0c;为了进一步提高配置效率&#xff0c;引入了scripty&#xff0c;自己写脚本&#xff0c;直接就可以用哦 1、安装 npm install scripty --save-dev 2…

【LeetCode刷题笔记(4)】【Python】【移动零】【简单】

文章目录 题目描述示例 1示例 2提示 解决方案题意拆解双指针算法双指针法的主要优点双指针法的使用场景举例&#xff1a; 解决方案&#xff1a;【双指针一次遍历】解题心得方案代码运行结果复杂度分析 结束语 移动零 题目描述 给定一个数组 nums&#xff0c;编写一个函数将所…

【Python】conda镜像配置,.condarc文件详解,channel镜像

1. conda 环境 安装miniconda即可&#xff0c;Miniconda 安装包可以到 http://mirrors.aliyun.com/anaconda/miniconda/ 下载。 .condarc是conda 应用程序的配置文件&#xff0c;在用户家目录&#xff08;windows&#xff1a;C:\users\username\&#xff09;&#xff0c;用于…

Peter算法小课堂—简单建模(2)

太戈编程736题 题目描述&#xff1a; 你是一只汪星人&#xff0c;地球毁灭后你回到了汪星&#xff0c;这里每天有n个小时&#xff0c;你需要为自己选择正好连续的m小时作为每天睡眠的时间。从凌晨开始&#xff0c;第i小时内的睡眠质量为xi&#xff0c;请问经过选择后&#xf…

WTF ‘Questions‘

WTF ‘Tech Team Lead’ As a Tech Team Lead, your role is to oversee the technical aspects of a project or team, and to provide guidance, support, and leadership to your team members. Here are some key responsibilities and aspects of the role: Leadership …

vite(一)——基本了解和依赖预构建

文章目录 一、什么是构建工具&#xff1f;1.为什么使用构建工具&#xff1f;2.构建工具的作用&#xff1f;3.构建工具怎么用&#xff1f; 二、经典面试题&#xff1a;webpack和vite的区别1.编译方式不同2.基础概念不同3.开发效率不同4.扩展性不同5.应用场景不同6.总结&#xff…