Spring IoC与DI原理及Bean管理详解

Spring Cloud入门-Admin服务监控中心(Hoxton版本)(1) 金三银四马上就到了,希望大家能好好学习一下这些技术点学习视频:《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取![外链图片转存中…(img-eFmYiRkP-1713300214138)][外链图片转存中…(img-gU7SO8rB-1713300214138)]既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化! 阅读详情

📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)、《解密程序员的思维密码——沟通、演讲、思考的实践》作者、清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。

📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。

📙不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。

Java程序员廖志伟

💡在这个美好的时刻,笔者不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。

优快云

在Spring框架中,IoC(控制反转)和DI(依赖注入)是两个紧密相连的核心概念。IoC是一种设计模式,它将对象的创建和依赖关系的配置从应用程序代码中分离出来,交由外部容器(如Spring容器)来管理。这种模式使得应用程序的组件更加松耦合,提高了代码的可维护性和可测试性。

IoC与DI的原理

在传统的程序设计中,对象的创建和依赖关系的配置通常是在代码中直接完成的。例如,一个服务类可能直接创建另一个服务类的实例,或者通过构造函数或setter方法注入依赖。这种方式使得服务类与依赖类紧密耦合,难以进行单元测试和组件替换。

IoC通过以下方式解决了这个问题:

  1. 容器管理对象:Spring容器负责创建和管理对象的生命周期,包括对象的创建、依赖注入、销毁等。
  2. 依赖关系配置:依赖关系通过配置文件(如XML、注解)或Java代码(如Java配置类)进行配置,而不是在代码中直接创建。

DI是IoC的一种实现方式,它通过以下方式将依赖关系注入到对象中:

  1. 构造器注入:通过构造函数将依赖关系注入到对象中。
  2. 设值注入:通过setter方法将依赖关系注入到对象中。

Bean生命周期管理

Spring容器不仅负责创建和管理对象,还负责管理对象的生命周期。Spring提供了丰富的生命周期接口和事件,允许开发者自定义Bean的初始化和销毁逻辑。

  1. 初始化:当Bean被创建后,Spring容器会调用其初始化方法,如init-method指定的方法或@PostConstruct注解的方法。
  2. 销毁:当Bean不再需要时,Spring容器会调用其销毁方法,如destroy-method指定的方法或@PreDestroy注解的方法。

Bean作用域

Spring容器支持多种Bean作用域,包括:

  1. Singleton:每个Spring容器中只有一个Bean实例。
  2. Prototype:每次请求时创建一个新的Bean实例。
  3. Request:每个HTTP请求创建一个新的Bean实例。
  4. Session:每个HTTP会话创建一个新的Bean实例。

BeanFactory与ApplicationContext

Spring提供了两种容器类型:BeanFactory和ApplicationContext。

  1. BeanFactory:它是Spring容器的底层实现,提供了基本的Bean创建和管理功能。
  2. ApplicationContext:它是BeanFactory的子接口,提供了更多的功能,如事件发布、国际化支持等。

注解驱动开发

Spring 3.0引入了基于注解的配置方式,使得配置更加简洁和易于理解。

  1. @Component:用于声明一个Bean。
  2. @Service:用于声明一个业务层Bean。
  3. @Repository:用于声明一个数据访问层Bean。
  4. @Autowired:用于自动注入依赖。

Java配置

Spring 3.1引入了Java配置,允许开发者使用Java代码来配置Spring容器。

  1. @Configuration:用于声明一个配置类。
  2. @Bean:用于定义Bean。

XML配置驱动

虽然注解和Java配置提供了更简洁的配置方式,但XML配置仍然是Spring框架的一部分,特别是在大型项目中。

SpEL(Spring表达式语言)

SpEL是Spring框架提供的一种表达式语言,用于在运行时计算值。

  1. 表达式语法:SpEL表达式使用类似于EL的表达式语法。
  2. 内置函数:SpEL提供了丰富的内置函数,如T(类型转换)、new(创建对象)等。

通过以上内容,我们可以看到Spring框架在IoC、DI、Bean生命周期管理、Bean作用域、BeanFactory、ApplicationContext、注解驱动开发、Java配置、XML配置驱动和SpEL等方面的强大功能。这些功能使得Spring框架成为Java企业级开发的事实标准。

优快云

博主分享

📥博主的人生感悟和目标

Java程序员廖志伟

📙经过多年在优快云创作上千篇文章的经验积累,我已经拥有了不错的写作技巧。同时,我还与清华大学出版社签下了四本书籍的合约,并将陆续出版。

面试备战资料

八股文备战
场景描述链接
时间充裕(25万字)Java知识点大全(高频面试题)Java知识点大全
时间紧急(15万字)Java高级开发高频面试题Java高级开发高频面试题

理论知识专题(图文并茂,字数过万)

技术栈链接
RocketMQRocketMQ详解
KafkaKafka详解
RabbitMQRabbitMQ详解
MongoDBMongoDB详解
ElasticSearchElasticSearch详解
ZookeeperZookeeper详解
RedisRedis详解
MySQLMySQL详解
JVMJVM详解

集群部署(图文并茂,字数过万)

技术栈部署架构链接
MySQL使用Docker-Compose部署MySQL一主二从半同步复制高可用MHA集群Docker-Compose部署教程
Redis三主三从集群(三种方式部署/18个节点的Redis Cluster模式)三种部署方式教程
RocketMQDLedger高可用集群(9节点)部署指南
Nacos+Nginx集群+负载均衡(9节点)Docker部署方案
Kubernetes容器编排安装最全安装教程

开源项目分享

项目名称链接地址
高并发红包雨项目https://gitee.com/java_wxid/red-packet-rain
微服务技术集成demo项目https://gitee.com/java_wxid/java_wxid

管理经验

【公司管理与研发流程优化】针对研发流程、需求管理、沟通协作、文档建设、绩效考核等问题的综合解决方案:https://download.youkuaiyun.com/download/java_wxid/91148718

希望各位读者朋友能够多多支持!

现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!

🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~

kafka可视化客户端工具(Kafka Tool)的基本使用 1、下载 下载地址:http://www.kafkatool.com/download.html 2、安装 根据不同的系统下载对应的版本,我这里kafka版本是1.1.0,下载kafka tool 2.0.1。 双击下载完成的exe图标,傻瓜式完成安装。 3、简单使用 kafka环境搭建请参考:CentOS7.5搭建Kafka2.11-1.1.0集群 1... 阅读详情

相关推荐

MySQL操作之数据类型

文章目录1、整数类型(INT)2、浮点数类型和定点数类型(Float/Double)3、日期与时间类型(DATE)4、字符串和二进制类型(CHAR) MySQL提供了5种数据类型:整数类型、浮点数类型、定点数类型、日期和时间类型、字符串类型和二进制类型。 1、整数类型(INT) 有5种数据类型:tinyINT、samllINT、mediumINT、INT、bigINT。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nk97lxNQ-1632048043862)(/User

lydms的博客 4565

mysql 的int类型_MySQL int类型

在本教程中,您将了解MySQL INT或整数数据类型以及如何在数据库表设计中使用它。 另外,我们将向您展示如何使用表中整数列的显示宽度和ZEROFILL属性。MySQL INT类型简介在MySQL中,INT代表整数。整数可以写成没有分数的数值,例如,它可以是1,100,4,-10等,它不能是1.2,5/3等。整数可以是零,正和负。MySQL支持所有标准SQL整数类型INTEGER、INT和SMAL...

weixin_33623088的博客 3万+

AVS3代码阅读HPM4.0

参考AVS3代码阅读(HPM6.0)(一.整体架构以及CU划分部分代码) 版本:HPM4.0 核心文件:app_encoder.c   要做的是帧间预测,所以前面的函数先暂时不管了,挖个坑以后再填。直接从enc_pic看起。 enc_pic()    ...

CRR的博客 3188

ApplicationContext介绍 ApplicationContext是什么?

如果说BeanFactory是Spring的心脏,那么ApplicationContext就是完整的身躯了。ApplicationContext由BeanFactory派生而来,提供了更多面向实际应用的功能。 ApplicationContext类体系结构 ApplicationContext的主要实现类是ClassPathXmlApplicationContext和FileSystemXmlApplicationContext,前者默认从类路径加载配置文件,后者默认从文件系统中装载配置文件

Move on 1万+

从零到一:如何用YOLOv8和PyQt5打造一个高效的路面坑洞检测系统

本文详细介绍了如何利用YOLOv8和PyQt5开发一个高效的路面坑洞检测系统。从环境配置、数据采集标注到模型训练优化,再到PyQt5界面开发与系统集成,提供了完整的实战指南。该系统结合深度学习技术,显著提升了道路检测的准确性和效率,适用于各类道路维护场景。

weixin_29047919的博客 308

无线图像传输新突破:深度JSCC算法在低带宽环境下的性能实测

本文深入探讨了基于深度学习的信源信道联合编码(JSCC)算法在低带宽无线图像传输中的突破性表现。通过实测数据对比,深度JSCC在低信噪比环境下展现出卓越的鲁棒性,有效对抗传统方案的“悬崖效应”,实现图像质量的平滑下降,为远程医疗、工业巡检等严苛场景提供了新的解决方案。

weixin_29090089的博客 508

【Spring 核心原理】彻底搞懂 IoC 与 DI:控制反转与依赖注入的本质

在 Spring 框架中,控制反转(IoC) 和 依赖注入(DI) 是支撑整个体系的 “灵魂”。对于我们 Java 后端开发者而言,理解它们是入门 Spring 的关键。本文从组件管理的痛点出发,结合原理、代码示例与流程分析,带你直观掌握 IoC/DI 的核心逻辑。v

weixin_73114629的博客 1200

适合小白的超详细yolov8环境配置+实例运行教程,从零开始教你如何使用yolov8训练自己的数据集(Windows+conda+pycharm)

yolov8源码下载地址:GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLiteyolov8使用文档: Home - Ultralytics YOLOv8 Docs教学视频参考: 包会!YOLOv8训练自己的数据集_哔哩哔哩_bilibili先用conda prompt创建一个虚拟环境,我的叫yolov8, python版本用3.10 源码地址:GitHub - ul

CV在读 25万+

Spring框架初体验——Bean管理之注解和XML

Spring为一站式轻量级开发框架(Web逻辑层,业务层,持久层) 工厂+反射+配置文件实现解耦合 schema:约束 docs:api文档和开发规范 libs:开发所需要的jar包 1.导入核心spring jar包:logging,beans,context,core,expression,log4j包,这些在pom.xml中配置 2.Project Structure更改默认目录,可以获得想...

Data _designer 1383

ExoPlayer硬解码实战:如何绕过系统默认软解码提升播放性能(附完整代码)

本文深入剖析了ExoPlayer默认解码器选择机制的不确定性,并提供了通过自定义MediaCodecSelector强制启用硬解码的完整实战方案。该方案能有效解决因软解码导致的播放卡顿、黑屏花屏及高功耗问题,显著提升Android应用在各种设备上的视频播放性能与稳定性。

weixin_29295541的博客 456

手把手教你用ADS优化肖特基二极管检波电路(附RC参数避坑指南)

本文详细介绍了如何使用ADS软件优化肖特基二极管检波电路,包括RC参数设置、常见失真问题分析与解决方案。通过实战案例和参数优化技巧,帮助射频工程师避免设计陷阱,提升电路性能。特别附有RC参数避坑指南,适用于调幅解调、功率检测等应用场景。

m2n3o4p5的博客 198

关于IOC(控制反转),DI(依赖注入)bean

ioc(控制反转,也叫spring容器)意思是在程序中不要主动去new一个对象,而是由外部提供对象,这就是控制不是在本类中,而是由DI(依赖注入,在IOC里面建立起bean与bean的关系)里面的bean(IOC造出来的对象)绑定关系。...

weixin_50685656的博客 313

[系统安全] 十一.那些年的熊猫烧香及PE病毒行为机理分析

如果你想成为一名逆向分析或恶意代码检测工程师,或者对系统安全非常感兴趣,就必须要认真分析一些恶意样本。熊猫烧香病毒就是一款非常具有代表性的病毒,当年造成了非常大的影响,并且也有一定技术手段。本文将详细讲解熊猫烧香的行为机理,并通过软件对其功能行为进行分析,这将有助于我们学习逆向分析和反病毒工作。后续作者还将对其进行逆向调试,以及WannaCry勒索蠕虫、各种恶意样本及木马的分析。基础性文章,希望您喜欢!同时,本文部分实验参考姜晔老师的视频分析,真的非常佩服和值得去学习的一位老师。技术路上哪有享乐,为了提升安

杨秀璋的专栏 7328

Spring框架(一):配置&注入&监听器

文章目录  1、Spring4学习路线   2、Spring的概述及入门   3、Spring的工厂类   4、Spring的配置   5、Spring的Bean管理(XML方式)  6、Spring的分模块开发的配置   7、CRM的综合案例

oZuoShen123的博客 492

C#上位机性能优化全攻略:彻底解决界面卡顿+多线程死锁+PLC数据延迟,产线实测稳定运行2年

一开始我们用的是网上找的零散优化代码,根本满足不了要求,后来花了2个月的时间,把之前27条产线的代码整理、重构、优化,做了一套这套方案上线后,连续稳定运行2年零3个月:界面响应时间稳定在50ms以内,多线程死锁率持续为0,PLC数据延迟稳定在150ms以内,系统可用率≥99.99%,帮客户一年省下了超过480万的停线损失、罚款损失和人工成本,客户第二年就把剩下的22条产线也全部交给我们做了,还介绍了3家同行。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 294

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

spring框架

spring介绍 1.三层架构中spring位置 2.spring一站式框架 正是因为spring框架性质是属于容器性质的. 容器中装什么对象就有什么功能.所以可以一站式. 不仅不排斥其他框架,还能帮其他框架管理对象. spring搭建 1.导包 最基础的包: beans core context expression log4j+logging com.springsource.org.a...

cj1140874158的博客 184

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

第一篇:Spring IoC容器——控制反转的本质与Bean的生命周期

Spring IoC核心机制解析 控制反转(IoC)将对象创建权交给容器,依赖注入(DI)实现解耦,推荐构造器注入方式。 容器选择上,ApplicationContext比BeanFactory功能更全面,适合实际开发场景。 Bean生命周期包含实例化、属性赋值、初始化、销毁四个阶段,每个阶段都提供扩展点。 循环依赖通过三级缓存解决单例Bean问题,但构造器注入导致的循环依赖无法处理。

2503_90542405的博客 454

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

691页,41个版块,终于有阿里大师可以带我吃透Spring源码了

Spring源码的相关问题可以说是现在Java面试必问的一些问题,同时如果你没有好好的阅读过源码的话,同时又觉得源码晦涩难懂的话,只想去取其精华去其糟粕的话,那么接下来这份spring源码学习宝典你一定要好好仔仔细细的看和多刷 ,帮助非常大! 41大模块目录 控制反转(IoC) 与依赖注入(DI)_ Spring容器基本使用及原理 xml中bean定义详解(:). 创建bean实例这些方式你们都知道? 玩转bean scope.避免跳坑里! 依赖注入之手动注入

Javaesandyou的博客 669

Spring的概述

文章目录什么是IOC解压Spring的开发包 什么是IOC IOC:Inversion of Control(控制反转),将对象的创建权反转给(交给)Spring 解压Spring的开发包 docs:Spring的开发规范和API libs:Spring的开发的jar和源码 schema:Spring的配置文件的约束 ...

qq_42216575的博客 118

SpringIoC & DI(6): SpringIoC & DI总结

SpringIoC 和 DI 的内容,已经全部学完。Spring配置文件(1):properties。

2301_80934700的博客 1110

SpringBoot与IoC容器

详细解释SpringBoot与IoC容器

2202_75557905的博客 511

Spring框架原理 | IOC/DI | Bean

Spring框架是一个开放源代码的J2EE应用程序框架,是针对bean的生命周期进行管理的轻量级容器,提供了功能强大IOC、AOP及Web MVC等功能

wei_shuo的博客 2204

Spring IoC 与 DI 深度剖析:从“控制反转”到 Bean 的集中管理

本文深入解析了Spring框架的核心机制IoC(控制反转)与DI(依赖注入)。首先介绍了Spring家族的关系及IoC容器概念,阐述了从传统高耦合开发到IoC解耦的演进过程。重点讲解了Spring Bean的集中管理方式,包括五大类注解(@Controller、@Service等)及其本质,以及@Bean方法注解的使用。详细分析了三种依赖注入方式(属性、构造方法和Setter注入)及其优缺点,并提供了解决多Bean冲突的方案(@Primary、@Qualifier等)。文章系统性地梳理了Spring IoC

此人很懒,什么都留下了...快进来看看吧 1985

Spring核心原理详解:IOC、DI与AOP的实现机制

本文深入解析了Spring框架的核心原理,包括控制反转(IOC)、依赖注入(DI)和面向切面编程(AOP)。IOC通过BeanFactory和ApplicationContext实现组件管理权的反转;DI采用构造器、Setter和字段三种注入方式,通过三级缓存解决循环依赖;AOP基于动态代理技术实现横切关注点的模块化。文章详细阐述了Spring容器的初始化流程、Bean生命周期管理以及自动装配机制,揭示了Spring框架高效管理对象依赖和增强功能的技术内幕。

cx1050306424的博客 3887

Spring核心概念IOC/DI、IOC容器和Bean原理及实现

Spring核心概念IOC、DI、IOC容器、Bean的原理及实现,具体概念讲解、案例分析,Spring入门必读!

m0_73500410的博客 1363

[Spring] Spring IoC与DI注入

容器是用来容纳某种物品的(基本)装置.想我们生活中的水杯,垃圾桶等都是容器.那么我们想一想,我们之前的学习中,都有学习过哪些容器.List/Map -> 数据存储容器.Tomcat -> Web容器IoC其实我们在之前学习Spring的阶段就使用过.在类上面添加和注解,就是在Spring中创建出一个类的对象,并把这个对象交给Spring管理,Spring框架启动时就会加载该类.把对象交给Spring管理,就是IoC思想.这个交给Spring管理的对象我们统称为Bean。

无需多言 2256
上一篇: Spring框架核心技术解析
下一篇: Spring框架核心技术解析
Java廖志伟
博客等级 码龄2年 3609粉丝 1517原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值