Spring IoC介绍

Spring源码学习--Spring中IOC和AOP的介绍 前言:控制反转(Inversion of Control,英文缩写为IoC); 面向切面编程(Aspect Oriented Programming,英文缩写为AOP)我们是在使用spring框架的过程中,很大一部分是为了使用IoC(依赖注入),和AOP(面向切面编程),这两个是Spring的灵魂。其中主要用到的设计模式有工厂模式和代理模式。IoC就是典型的工厂模式,通过sessionfactor 阅读详情

有部分Java开发者对 IoC(Inversion Of Control)和 DI(Dependency Injection)的概念有些混淆,认为二者是对等的。

IoC 其实有两种方式,一种就是 DI,而另一种是 DL,即 Dependency Lookup(依赖查找),前者是当前软件实体被动接受其依赖的其他组件被 IoC 容器注入,而后者则是当前软件实体主动去某个服务注册地查找其依赖的那些服务,概念之间的关系如图 1 所示可能更贴切些。

IoC相关概念示意图
图 1  IoC相关概念示意图


我们通常提到的 Spring IoC,实际上是指 Spring 框架提供的 IoC 容器实现(IoC Container),而使用 Spring IoC 容器的一个典型代码片段就是:

public class App {
    public static void main(String[] args) {
        ApplicationContext context = new FileSystemXmlApplication-Context("...");
        // ...
        MockService service = context.getBean(MockService.class);
        service.doSomething();
    }
}
任何一个使用 Spring 框架构建的独立的 Java 应用(Standalone Java Application),通常都会存在一行类似于“context.getBean(..);”的代码。


实际上,这行代码做的就是 DL 的工作,而构建的任何一种 IoC 容器背后(比如 BeanFactory 或者 ApplicationContext)发生的事情,则更多是 DI 的过程(也可能有部分 DL 的逻辑用于对接遗留系统)。

Spring 的 IoC 容器中发生的事情其实也很简单,总结下来即两个阶段:

  • 采摘和收集“咖啡豆”(bean)
  • 研磨和烹饪咖啡


Spring IoC 容器的依赖注入工作可以分为两个阶段:

1)收集和注册

第一个阶段可以认为是构建和收集 bean 定义的阶段,在这个阶段中,我们可以通过 XML 或者 Java 代码的方式定义一些 bean,然后通过手动组装或者让容器基于某些机制自动扫描的形式,将这些 bean 定义收集到 IoC 容器中。

假设我们以 XML 配置的形式来收集并注册单一 bean,一般形式如下:

<bean id="mockService" class="..MockServiceImpl"> ...</bean>

如果嫌逐个收集 bean 定义麻烦,想批量地收集并注册到 IoC 容器中,我们也可以通过 XML Schema 形式的配置进行批量扫描并采集和注册:

<context:component-scan base-package="com.keevol">

注意基于 JavaConfig 形式的收集和注册,不管是单一还是批量,后面我们都会单独提及。

2)分析和组装

当第一阶段工作完成后,我们可以先暂且认为 IoC 容器中充斥着一个个独立的 bean,它们之间没有任何关系。

但实际上,它们之间是有依赖关系的,所以,IoC 容器在第二阶段要干的事情就是分析这些已经在 IoC 容器之中的 bean,然后根据它们之间的依赖关系先后组装它们。

如果 IoC 容器发现某个 bean 依赖另一个 bean,它就会将这另一个 bean 注入给依赖它的那个 bean,直到所有 bean 的依赖都注入完成,所有 bean 都“整装待发”,整个 IoC 容器的工作即算完成。

至于分析和组装的依据,Spring 框架最早是通过 XML 配置文件的形式来描述 bean 与 bean 之间的关系的,随着 Java 业界研发技术和理念的转变,基于 Java 代码和 Annotation 元信息的描述方式也日渐兴盛(比如 @Autowired 和 @Inject),但不管使用哪种方式,都只是为了简化绑定逻辑描述的各种“表象”,最终都是为本阶段的最终目的服务。

很多 Java 开发者一定认为 Spring 的 XML 配置文件是一种配置(Configuration),但本质上,这些配置文件更应该是一种代码形式,XML 在这里其实可以看作一种 DSL,它用来表述的是 bean 与 bean 之间的依赖绑定关系,如果没有 IoC 容器就要自己写代码新建(new)对象并配置(set)依赖。

返回《Spring Boot框架入门教程(快速学习版)》目录>>

请简单的介绍一下什么是springIoc? 控制反转,所谓控制反转是指,本来被调用者的实例是有调用者来创建的,这样的缺点是耦合性太强,IOC 则是统一交给 spring 来管理创建,spring就是容器。 IOC是基于java的反射机制以及工厂模式实现的。工场:各类都实现了某一接口,并提供一个工场类,根据传入参数的不同来创建不同的对象。 反射:可以根据类名获取该类实例, Class.forName(ClassName).newInstance(); Spring 的 IoC 设计支持以下功能: 依赖注入 依赖检查 自动装配 支持集合.. 阅读详情

相关推荐

Java IoC讲解

Ioc,使用容器按需要创建对象,避免了在对象中new 对象的高耦合...........

Spring中的IOC详解

单例Bean和多实例Bean的生命周期主要区别在于实例化和销毁的管理方式,单例Bean在容器启动时创建一个实例,并由容器负责管理其生命周期的完整过程。在Spring框架中,Bean是应用程序的核心组件,它们由Spring容器创建、组装和管理,以帮助开发者实现松耦合、可测试和可维护的代码。IOC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。Bean的自动装配是Spring框架提供的一种便捷的方式,用于自动解析和设置Bean之间的依赖关系,而无需显式配置每一个依赖关系的方式。

努力分享一些干货 8635

Grok-1.5+Ollama企业级本地化部署与合规实践指南

本文详细介绍了Grok-1.5+Ollama企业级本地化部署与合规实践指南,重点分析了本地化部署的成本优势和数据主权保障。通过RTX 4090显卡的硬件选型、Ubuntu 22.04系统优化及部署流程中的关键陷阱规避,为企业提供了高效、安全的AI模型部署方案。特别适合金融、医疗等敏感行业。

weixin_29094539的博客 180

Spring IOC详细介绍

Spring IOC 1. 主要内容 2. Spring 框架 2.1. Spring 框架概念   Spring 是众多开源java项⽬中的⼀员,基于分层的javaEE应⽤⼀站式轻量级开源框架,主要核⼼是IOC(控制反转/依赖注⼊)与 AOP(⾯向切⾯)两⼤技术,实现项⽬在开发过程中的轻松解耦,提⾼项⽬的开发效率。   在项⽬中引⼊Spring⽴即可以带来下⾯的好处 降低组件之间的耦合度,实现软件各层之间的解耦。 可以使⽤容器提供的众多服务,如:事务管理服务、消息服务等等。 当我们使⽤容器管理事务时,

weixin_44454512的博客 2304

STM32H7多通道ADC数据采集实战:CubeMX配置ADC1/2/3+DMA/BDMA+Cache避坑全记录

本文详细解析了STM32H7多通道ADC数据采集的实战配置,涵盖CubeMX中ADC1/2/3与DMA/BDMA的协同设置及Cache一致性处理。通过硬件架构分析、DMA优化技巧和Cache避坑指南,帮助开发者实现高精度数据采集,适用于电机控制、环境监测等嵌入式系统。

weixin_28744613的博客 292

SAP-MM-采购申请字段解析

采购申请抬头以及行项目字段解析

yanzibing99的博客 7305

springboot IOC实战应用

@Configuration代表这是一个Java配置文件,Spring的容器会根据它来生成IoC容器去装配Bean//@Bean//代表将initUser方法返回的POJO装配到IoC容器中,而其属性name定义这个Bean的名称,如果没有配置//它,则将方法名称“initUser”作为Bean的名称保存到SpringIoC容器中}}mysqltry{}}............

mrluoxj的专栏 1271

基于SOEM的伺服电机控制实战:从配置到调试

本文详细介绍了基于SOEM的伺服电机控制实战,从硬件配置到软件调试的全过程。通过分享PDO映射、状态机控制、性能优化等核心技巧,帮助开发者快速掌握EtherCAT通信与伺服电机控制的关键技术,提升工控系统开发效率。

weixin_29165465的博客 519

Spring IOC详解

什么是Bean。

杰尼龟的小龟壳的博客 1138

【CANdelaStudio编辑CDD】-2.2-给$27服务SecurityAccess创建一个SecurityLevel安全级别并修改SecurityAccess安全访问状态机(UDS诊断)

前一篇: 【UDS诊断描述文件CDD】-2.1-ISO_14229中$27服务理论部分https://blog.youkuaiyun.com/qfmzhu/article/details/120392660 案例背景: 在CDD中如何给$27服务创建一个新的SecurityLevel安全级别; 在CDD中如何给$27服务修改SecurityAccess安全访问状态机。 1 查看$27服务中已有的SecurityLevel安全级别 2 查看$27服务中已有的SecurityAccess安全...

「汽车电子助手」的博客 4641

huggingface高速下载模型的实战代码

本文主要介绍了huggingface高速下载模型的实战代码,尤其是无法通过国内源进行下载的huggingface模型,希望能对学习大模型的同学们有所帮助。需要特别说明的是,本文的代码是完全原创的,即能够最大限度利用宽度的速度,而且还能实现断点续传。 文章目录 1. 背景 2. 实战代码

herosunly的博客 29万+

Spring中的IOC介绍

Spring中的IOC介绍IOC(控制反转)IOC介绍IOC是什么IOC能做什么Spring容器管理对象1、maven管理依赖2、给定容器的配置文件3、IOC容器管理对象4、通过容器来获取对象Spring中IOC容器介绍Spring中Bean的实例化方式1、基于XML配置方式装配bean2、使用注解方式装配Bean IOC(控制反转) IOC介绍 IOC是什么 IOC(Inversion of Control 即控制反转)将对象交给容器管理 考虑:谁控制谁、控制什么?为了是反转?哪些方面反转? 谁控制了谁?

m0_46853673的博客 1万+

华为OD新系统机试真题-8位LED控制器(C/C++/Py/Java/Js/Go)

华为OD新系统机试真题【8位LED控制器】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD新系统4月19号机试真题【8位LED控制器】

qq_45776114的博客 596

Spring IOC介绍

IOC(DI)-控制反转(依赖注入) IOC称之为控制反转,简单来说就是将对象的创建的权利和对象的声明周期的管理过程交给Spring框架来处理,在这个开发过程中不再需要关注对象的创建和生命周期的管理,而是在需要的时由Spring框架提供,这个由Spring框架管理对象创建和生命周期的机制称之为控制反转。 其中,在创建对象的过程中spring可以根据配置对象的属性进行设置,这个过程称为依赖注入(DI...

weixin_43635271的博客 3278

W5500以太网&PoE扩展模块原理图设计,已量产

本文将以 W5500 以太网 & PoE 扩展板为对象,从嵌入式硬件设计的视角,深度拆解其电路架构、核心器件选型、关键功能实现,以及这款板子解决行业痛点的设计思路。

不脱发的程序猿 933

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【Spring框架】Spring的IOC介绍

Spring的IOC介绍 Spring的IOC思想 Spring的核心思想之一:IOC(Inversion Of Control)控制反转。 控制反转(Inversion Of Control,即IOC):把对象的创建、初始化、销毁等工作交给框架,是框架的重要特征。并非面向对象编程的术语。控制反转包括依赖注入和依赖查找。 控制反转表达的意思是什么? 把对象的创建交给外部的容器完成,这个就是控制反转。 Spring使用控制反转来实现对象的使用(使该部分程序不用在程序中写死)。 那么对象和对象之间的

Sampson_S的博客 340

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【Spring IoC】容器和IoC介绍以及IoC程序开发的优势

容器是用来容纳某种物品的(基本)装置。生活中的水杯,垃圾桶,冰箱等等这些都是容器。我们想象,之前的内容中我们接触到了哪些容器?List/Map:数据存储容器Tomcat:Web 容器IoC是Spring的核心思想,也是常见的面试题。其实我们在前面已经使用过了IoC,在类上面添加注解,就是把这个对象交给Spring管理,Spring框架启动时就会加载该类。把对象交给Spring管理,就是IoC思想。

Yeeear的博客 3569

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

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

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

小白也看得懂的 Spring IoC 核心流程介绍

前言 本文将用最通俗易懂的文字介绍SpringIoC中的核心流程,主要用于帮助初学者快速了解IoC的核心流程,也可以用作之前源码分析文章的总结。本着简单的初衷,本文会省略掉大量流程,只介绍最重要的步骤。 基础概念 1、IoC 和 DI IoC (Inversion of Control),即控制反转。这不是一种新的技术,而是Spring的一种设计思想。 在传统的程序设...

程序员囧辉 1万+

Spring框架及Spring IoC核心容器介绍

SpringIoC核心容器介绍及其使用方式,推荐注解+配置类!!

weixin_44525733的博客 2514

介绍一下Spring的IOC

同样是上面的例子,假如说BeanA需要修改,如果没有IOC的话,所有引用到A的其他bean都需要感知这个逻辑,并且做对应的修改。来说,如果B要使用A,那还要把c,d,e,f多个类全都感知一遍,这显然是非常麻烦且不合理的。也就是说,没有Spring的话,我们要使用的对象,需要我们自己创建,而有了Spring的IOC之后,对象由IOC容器创建并管理,我们只需要在想要使用的时候从容器中获取就行了。控制权被转移到Spring容器中,容器负责创建和管理对象,并在需要的时候将它们注入到应用程序中。

sinat_53467514的博客 851

spring中IOC相关介绍

控制反转(Inversion of Control, IoC)是一种软件设计原则,其核心思想是将传统编程中的控制流程反转。在传统的编程模式中,组件之间的依赖关系由组件自身在运行时决定。而在IoC中,这种控制权被反转,由外部容器在运行前配置和决定。简单来说,IoC就是一种让对象的创建和依赖关系由外部控制的机制。@Bean在这个示例中,每次请求都会创建一个新的MyService实例。依赖注入是一种实现控制反转(IoC)的模式,它允许开发者将组件的依赖关系从组件本身转移到外部容器。

无远弗届 870

Spring框架之IOC介绍

首先,官网中有这样一句话:Spring Framework implementation of the Inversion of Control (IoC) principle.这句话翻译过来就是:Spring实现控制反转(IOC)原理,由此可以得出,Inversion of Control(IOC)是一个名为控制反转的原理,而Spring实现了他。而实现这个原理或者说设计原则的最常见的方式也是Spring框架使用的方式叫做依赖注入,也就是Dependency Injection(DI)。

kfashfasf的博客 779
上一篇: Spring框架的起源
下一篇: Spring JavaConfig和常见Annotation
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值