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

Spring IOC容器简介

Spring IoC(Inversion of Control,控制反转)容器是Spring框架的核心组件之一,负责管理应用程序中的对象及其依赖关系。IoC容器通过依赖注入(Dependency Injection,DI)实现对象的创建、配置和管理,从而实现松耦合设计。

IoC容器的主要功能

  1. 对象创建:IoC容器负责创建和管理应用程序中的对象(Bean)。
  2. 依赖注入:IoC容器通过构造器注入、Setter方法注入或字段注入,将对象的依赖关系注入到对象中。
  3. 配置管理:IoC容器根据配置文件(XML、注解或Java配置类)来管理Bean的定义和依赖关系。
  4. 生命周期管理:IoC容器管理Bean的生命周期,包括初始化和销毁回调。

IoC容器的类型

Spring提供了两种主要的IoC容器:

  1. BeanFactory:最基本的IoC容器,提供基本的依赖注入功能。BeanFactoryApplicationContext的超接口。
  2. ApplicationContext:扩展了BeanFactory,提供了更多的企业级功能,如事件发布、国际化、AOP等。常用的ApplicationContext实现包括:
    • ClassPathXmlApplicationContext:从类路径下的XML配置文件加载上下文。
    • FileSystemXmlApplicationContext:从文件系统中的XML配置文件加载上下文。
    • AnnotationConfigApplicationContext:从Java配置类加载上下文。

IoC容器的工作原理

IoC容器的工作原理主要包括以下几个步骤:

  1. 配置解析:IoC容器读取配置文件(XML、注解或Java配置类),解析Bean定义和依赖关系。
  2. Bean实例化:根据配置创建Bean实例。
  3. 依赖注入:将Bean的依赖关系注入到Bean实例中。
  4. 初始化回调:调用Bean的初始化方法(如afterPropertiesSet@PostConstruct)。
  5. Bean使用:应用程序通过IoC容器获取Bean实例并使用。
  6. 销毁回调:在容器关闭时,调用Bean的销毁方法(如destroy@PreDestroy)。

示例代码

以下是一个简单的示例,展示了如何使用Spring IoC容器管理Bean:

XML配置示例

配置文件applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="myBean" class="com.example.MyBean"/><bean id="myService" class="com.example.MyService"><property name="myBean" ref="myBean"/></bean>
</beans>

Java代码:

public class MyBean {public void doSomething() {System.out.println("Doing something...");}
}public class MyService {private MyBean myBean;public void setMyBean(MyBean myBean) {this.myBean = myBean;}public void performAction() {myBean.doSomething();}
}public class Main {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");MyService myService = context.getBean(MyService.class);myService.performAction();}
}
注解配置示例

Java代码:

@Component
public class MyBean {public void doSomething() {System.out.println("Doing something...");}
}@Service
public class MyService {@Autowiredprivate MyBean myBean;public void performAction() {myBean.doSomething();}
}@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
}public class Main {public static void main(String[] args) {ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);MyService myService = context.getBean(MyService.class);myService.performAction();}
}

在这个示例中,AppConfig类是一个配置类,使用@ComponentScan注解扫描指定包中的组件。MyBeanMyService类分别使用@Component@Service注解标注,MyService类通过@Autowired注解自动注入MyBean。在Main类中,通过Spring容器获取MyService实例并调用其方法。

相关文章:

Spring IOC容器简介

Spring IoC&#xff08;Inversion of Control&#xff0c;控制反转&#xff09;容器是Spring框架的核心组件之一&#xff0c;负责管理应用程序中的对象及其依赖关系。IoC容器通过依赖注入&#xff08;Dependency Injection&#xff0c;DI&#xff09;实现对象的创建、配置和管理…...

【backstopjs】入门安装环境

1.首先全局安装BackstopJS npm install -g backstopjs 安装失败,常见报错&解决办法&#xff1a; 报错&#xff1a; (venv) D:\workspace\Otaku\backstop>npm install -g backstopjs npm warn deprecated inflight1.0.6: This module is not supported, and leaks mem…...

LocalDate 类常用方法详解(日期时间类)

LocalDate 类常用方法详解 LocalDate 是 Java 8 引入的日期时间API中的一个类&#xff0c;用于表示不含时间和时区的日期&#xff08;年、月、日&#xff09;。以下是一些常用的 LocalDate 方法&#xff1a; 创建 LocalDate 实例 now()&#xff1a;获取当前日期 LocalDate t…...

kmp desktop实现excel预览

先将excel转paf https://blog.csdn.net/qq_42761569/article/details/121699594 package utilimport com.aspose.cells.License import com.aspose.cells.PdfSaveOptions import com.aspose.cells.Workbook import com.geolo.desktop.common.utils.LogUtils import java.io.Fi…...

OB_GINS_day3

这里写目录标题 实现当前状态初始化实现预积分的初始化由于此时preintegration_options 是3&#xff08;也就是考虑odo以及earth rotation&#xff09;为预积分的容器添加需要积分的IMU积分因子接下来是添加新的IMU到preintegration中 实现当前状态初始化 这个state_curr的主要…...

【Python3】【力扣题】405. 数字转换为十六进制数

【力扣题】题目描述&#xff1a; 题意理解&#xff1a;&#xff08;不允许使用库函数&#xff09; 数字等于0&#xff0c;则结果为0&#xff0c; 数字小于0&#xff0c;则补码运算&#xff0c;即最高位&#xff08;32位&#xff09;为1&#xff0c;其余全部取反&#xff0c;再加…...

记录一次企业外部通过ssh 连接数据库的事DBeaver

情况大概是这样&#xff0c;公司算法供应商开通了连接某个服务器A的权限&#xff0c;但是数据库x是在另一台服务器B上。 直接通过外部连接数据库是不行的&#xff0c;需要借用服务器A来进行访问x 使用软件&#xff1a;DBeaver, 数据库x类型&#xff1a;oracle 需要的信息&am…...

中聚企服:中聚AI女娲大模型,企业难题迎刃而解!

在这个瞬息万变的商业世界里&#xff0c;企业面临的挑战愈发复杂多样。小到日常文书和规章制度&#xff0c;大到工商财税和知识产权保护&#xff0c;每一个环节都至关重要。为了帮助中小企业在激烈的市场竞争中脱颖而出&#xff0c;中聚企服在官方小程序重磅上线了一款革命性产…...

对镜像精简

dive工具&#xff0c;用来优化镜像大小 ENV命令合并 ENV DEBUG_PORT8777 \HTTP_PORT12080 \PROGRAM_FILE_HOME_UPORTAL_CONF/home/zenap/uportal/confWORKDIR usr/src/app&#xff0c;会切换到这个目录 使用COPY --chown 修改属主&#xff0c;不要使用RUN chown 容器内非root…...

老电脑不能装纯净版windows

手上有一台2016年的老笔记本电脑&#xff0c;用了8年&#xff0c;基本上能换的都换了一遍&#xff0c;散热风扇换了&#xff0c;键盘换了&#xff0c;屏幕换了&#xff0c;扬声器也换了&#xff0c;内存也换大了&#xff0c;甚至都换过固态硬盘&#xff0c;但是CPU没法换&#…...

在Python中实现一个简单的社交媒体应用

在Python中实现一个简单的社交媒体应用 社交媒体应用是现代互联网的重要组成部分,允许用户分享信息、交流和互动。在这篇博文中,我们将使用Python构建一个简单的社交媒体应用,涵盖用户注册、发布动态、评论和查看动态等基本功能。我们将使用Flask框架作为后端,SQLite作为数…...

pytest高版本兼容test_data[“log“] = _handle_ansi(“\n“.join(logs))错误

一、问题现象&#xff1a; 执行seleniumpytest结束时报: INTERNALERROR> File "D:\workspace\pytestframe\.venv\Lib\site-packages\pytest_html\report_data.py", line 141, in add_test INTERNALERROR> test_data["log"] _handle_ansi(&q…...

Redis技术入门与实践指南

一、Redis基础知识 1、概念 Redis是一个开源的、遵循BSD协议的、基于内存的而且目前比较流行的键值数据库(key-value database)&#xff0c;是一个非关系型数据库&#xff0c;redis 提供将内存通过网络远程共享的一种服务&#xff0c;提供类似功能的 还有memcached&#xff0…...

如何一键完成20个Oracle实例运维脚本部署

在日常的运维工作中&#xff0c;常常是一个人需要管理维护数个数十个数据库实例&#xff0c;如果是开源类集群如mysql&#xff0c;PG等可能更多&#xff1b;在没有商业的集中管理平台的情况下&#xff0c;如何快速的部署监控或者运维脚本&#xff0c;是一个值得探讨的问题&…...

【C++刷题】力扣-#598-区间加法 II

题目描述 给你一个 m x n 的矩阵 M和一个操作数组 op 。矩阵初始化时所有的单元格都为 0 。ops[i] [ai, bi] 意味着当所有的 0 < x < ai 和 0 < y < bi 时&#xff0c; M[x][y] 应该加 1。 在 执行完所有操作后 &#xff0c;计算并返回 矩阵中最大整数的个数 。 示…...

优雅的LUA数据记录方法-serpent序列化+LUA Table

目录 简述如何集成&#xff1f;如何使用序列化 反序列化 参考 简述 项目里需要使用LUA脚本将数据记录到文件&#xff0c;要方便的增加、查找、删除&#xff0c;要方便的加载与存回。 使用序列化/反序列化 lua table可以很容易实现这些功能。 序列化将table转换为字符串 反序列…...

初始JavaEE篇——多线程(4):wait、notify,饿汉模式,懒汉模式,指令重排序

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;JavaEE 目录 wait、notify 方法 多线程练习 单例模式 饿汉模式 懒汉模式 指令重排序 wait、notify 方法 wait 和 我们前面学习的sleep…...

Apache Solr 身份认证绕过导致任意文件读取漏洞复现(CVE-2024-45216)

0x01 产品简介 Apache Solr是一个开源的搜索平台,基于流行的Apache Lucene库构建。它提供了一个强大的全文搜索功能,能够快速处理大量数据,并支持复杂的搜索操作。并且是一个独立的企业级搜索应用服务器,它采用Java开发,并基于Apache Lucene实现。Solr提供了类似于Web-Se…...

C#整合Ollama实现本地LLMs调用

前言 近两年AIGC发展的非常迅速&#xff0c;从刚开始的只有ChatGPT到现在的很百家争鸣。从开始的大参数模型&#xff0c;再到后来的小参数模型&#xff0c;从一开始单一的文本模型到现在的多模态模型等等。随着一起进步的不仅仅是模型的多样化&#xff0c;还有模型的使用方式。…...

C++基于opencv的视频质量检测--图像抖动检测

文章目录 0.引言1. 原始代码分析2. 优化方案3. 优化后的代码4. 代码详细解读 0.引言 视频质量图像抖动检测已在C基于opencv4的视频质量检测中有所介绍&#xff0c;本文将详细介绍其优化版本。 1. 原始代码分析 首先&#xff0c;我们来看图像抖动检测的原始代码&#xff1a; …...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...