Spring loC的介绍

本文介绍了控制反转(IoC)的概念及其在Spring框架中的实现。解释了IoC如何改变对象间的依赖关系管理和依赖注入(DI)的作用,以及Spring IoC容器如何通过两个主要阶段(收集与注册bean,分析与组装bean)工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spring loC的介绍:

(文中有部分内容转于这篇文章https://blog.csdn.net/qq_40587575/article/details/79901550)
loC——Inversion of Control 即“控制反转”,是一种设计思想。在java开发中,loc意味着将你设计好的对象交给容器控制,而不是传统的由对象内部控制。

​ **谁控制谁,控制了什么?**传统的Java SE程序设计,是由程序主动去创建依赖对象,而loC是由一个专门的容器来创建依赖对象,即由loC容器来控制对象的创建。这其中,**谁控制谁?**当然是loC控制了对象;**控制了什么?**控制了外部资源的获取(不只是对象,包括比如文件等)。

​ **为何是反转,什么地方反转了?**传统应用程序中,是由我们在对象中主动去控制去直接获取依赖对象,也就是正转;而反转是由容器来帮忙创建及注入依赖对象。为何要反转?,因为容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转。**什么地方反转了?**依赖对象的获取被反转了。

在这里插入图片描述

1.2 loC和DI

​ DI------Dependency Injection,即依赖注入,组件之间的依赖关系由容器在运行期决定,即由容器动态地将某个依赖关系注入到组件当中。依赖注入的目的是为了提升组件重用的频率,并为系统搭建一个灵活可扩展的平台。

​ 理解DI的关键是,谁依赖谁,为什么依赖?谁注入谁,注入了什么?

​ **谁依赖谁?**应用程序依赖于loC容器

​ **为什么依赖?**应用程序需要loC容器来提供对象需要的外部资源。

​ **谁注入谁?**loC容器注入应用程序某个对象,应用程序依赖的对象。

​ **注入了什么?**注入了某个对象所需要的外部资源(包括对象、资源、常用数据)

loC和DI的区别?
​ 其实他们是同一个概念的不同角度描述,由于控制反转概念比较含糊,所以2004年大师级人物Martin Fowler又给出了一个新的名字:“依赖注入”,相对IoC 而言,“依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”。

1.3 Spring loC容器

​ Spring的loC容器发生的事情其实也很简单,总结有两个阶段。
​ 1、采摘和手机“咖啡豆”(bean)

​ 2、研磨和烹饪咖啡。

​ (1)收集和注册

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

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

​ 想批量地收集并注册到 IoC 容器中,我们也可以通过 XML Schema 形式的配置进行批量扫描并采集和注册:

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

​ (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)依赖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值