当前位置: 首页 > 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; …...

内网福音:手把手教你用Docker离线搞定Jitsi-Meet视频会议(附完整镜像包下载)

企业级内网视频会议解决方案&#xff1a;Docker化Jitsi-Meet离线部署全指南 在高度封闭的企业内网环境中部署视频会议系统一直是个技术难题。军工单位、金融机构核心网络、科研实验室等场景对数据安全有着近乎苛刻的要求&#xff0c;传统的SaaS视频会议方案无法满足其网络隔离需…...

Embedded Coder实战:5分钟搞定PID控制器的C代码生成(附完整配置流程)

Embedded Coder实战&#xff1a;5分钟搞定PID控制器的C代码生成&#xff08;附完整配置流程&#xff09; 在工业自动化领域&#xff0c;PID控制器就像一位不知疲倦的调节大师&#xff0c;默默维持着无数设备的稳定运行。想象一下&#xff0c;当你需要将这套经典算法部署到资源有…...

前端自动化部署终极指南:从CI/CD到容器化的完整流程

前端自动化部署终极指南&#xff1a;从CI/CD到容器化的完整流程 【免费下载链接】all-of-frontend 你想知道的前端内容都在这 项目地址: https://gitcode.com/gh_mirrors/al/all-of-frontend GitHub 加速计划&#xff08;all-of-frontend&#xff09;是一个全面的前端学…...

别再写重复代码了!微信小程序分页加载与下拉刷新,一个通用组件就搞定

微信小程序分页加载与下拉刷新的工程化实践 每次开发新页面时&#xff0c;你是否还在重复编写分页加载和下拉刷新的逻辑&#xff1f;作为一个有追求的小程序开发者&#xff0c;我们需要思考如何将这些通用功能抽象成可复用的组件或Mixin。本文将带你从工程化角度&#xff0c;设…...

CCF网络安全期刊大盘点:哪些期刊更适合你的研究方向?

CCF网络安全期刊精准匹配指南&#xff1a;如何为你的研究找到最佳发表平台 在网络安全研究领域&#xff0c;选择合适的期刊发表论文不仅关系到研究成果的传播效果&#xff0c;更直接影响学术影响力的建立和职业发展路径。面对CCF&#xff08;中国计算机学会&#xff09;推荐目录…...

ESP32/ESP8266轻量级二进制RPC库设计与实践

1. 项目概述esp_rpc是一个专为 ESP8266 和 ESP32 平台深度优化的轻量级远程过程调用&#xff08;Remote Procedure Call, RPC&#xff09;库。其设计哲学直指嵌入式资源受限场景的核心矛盾&#xff1a;在极小内存占用&#xff08;ROM/RAM 双敏感&#xff09;与可靠跨设备交互之…...

生成历史场景数据(实际应用替换为真实数据)

电热冷氢综合能源系统分布式鲁棒优化运行&#xff0c;基于Wasserstein 距离&#xff0c;包含结果绘图和随机优化和鲁棒优化对比场景&#xff0c;代码备注详细最近在搞综合能源系统的兄弟肯定对"不确定性"这词深恶痛绝——电力负荷说变就变&#xff0c;氢能价格跟过山…...

游戏盾导致 Unity/UE 引擎崩溃的主要原因排查?

做游戏上线的都知道&#xff0c;游戏盾是必装的——毕竟要防外挂、防攻击&#xff0c;不然刚上线就被搞崩&#xff0c;损失太大。但最近帮几个同行排查问题&#xff0c;发现好多项目接入游戏盾后&#xff0c;Unity和UE引擎动不动就崩&#xff0c;要么内存飙到爆&#xff0c;安卓…...

ParquetViewer:Windows平台最友好的Parquet文件查看与查询工具

ParquetViewer&#xff1a;Windows平台最友好的Parquet文件查看与查询工具 【免费下载链接】ParquetViewer Simple Windows desktop application for viewing & querying Apache Parquet files 项目地址: https://gitcode.com/gh_mirrors/pa/ParquetViewer 还在为Wi…...

【ASTM D4169】之穿梭机器人,仓储机器人,托盘四向穿梭机器人的包装运输安全验证守法

穿梭机器人&#xff08;通常指托盘四向穿梭车、智能物流机器人&#xff09;的包装验证&#xff0c;核心目标是确保其在经历长途运输、仓储周转、装卸搬运后&#xff0c;机械结构、电子元器件和功能性能保持完好。 穿梭机器人的包装验证体系相对复杂&#xff0c;因为它既是运输…...