Spring-依赖控制反转和IOC容器

简介: Spring-依赖控制反转和IOC容器

关键字:

依赖控制反转,SpringIOC容器



什么是依赖控制反转?


许多非凡的应用都是由两个或多个类通过彼此合作实现业务逻辑,这使得每个对象都需要有其合作对象的引用。如果这个获取过程要靠自身实现,这将导致代码高度耦合,难易测试。


在面向对象系统中使用依赖反转的思想,使对象封装了数据和对数据的处理,对象的依赖关系常体现在对数据和方法的依赖上。这些依赖关系可以通过把对象的依赖注入交给框架或IOC容器来完成,从具体对象手中交出控制权。这种将从具体对象中获取依赖关系反转为从框架或IOC容器中获取依赖关系的方式成为依赖控制反转。核心在于:依赖对象的获得被反转了。


依赖控制反转有多种实现方式


在Spring中,IOC容器是实现依赖控制反转的载体,它可以在对象生成或者初始化时,直接将数据注入到对象中;也可以通过将对象引用注入到对象数据域中的方式来注入对方法的依赖。这种依赖注入是可以递归的,对象被逐层注入。将依赖控制反转,把控制权从具体业务对象手中转交到平台或框架中,促进了IOC设计模式的发展,是IOC容器要解决的核心问题。


哪些内容可以放到IOC容器中?


和系统运行状态弱关联的对象依赖关系的建立和维护


很多对象依赖关系的建立和维护并不需要和系统运行状态有很强的关联性,所以可以把面向对象编程中需要执行的诸如新建对象,为对象引用赋值等操作交由容器统一完成。这样散落在不同代码中功能相同的部分就集中成为容器的一部分,也就是成为面向对象基础设施的一部分。


对象类型的管理


面向对象系统中的对象,一部分是数据对象,还有很大一部分是用来处理数据的。这些对象并不常发生变化,是系统中基础的一部分。这种处理数据的对象很多时候不涉及数据和状态共享,可以设置为单例存在于系统中。需要共享时,可以再做处理。


不随着系统运行状态变化,稳定性强的依赖关系


依赖关系不会随着系统运行状态改变而改变



SpringIOC容器

SpringIOC提供了一个基本的JavaBean容器,通过IOC模式管理依赖关系,并通过依赖注入和AOP切面增强了为JavaBean这样的POJO对象赋予事务管理,生命周期管理等功能。


Spring使用IOC容器把获取资源的方式反转,通过让IOC容器管理依赖关系,将依赖关系注入到组件中,使依赖关系的适配和管理更加灵活。具体的注入实现方式有:接口注入(通过接口传参将引用注入),setter注入,构造器注入等,setter注入,构造器注入是主要的注入方式,setter注入更常用一些。而且为了防止注入异常,SpringIOC容器还提供了对特定依赖的检查。


在管理依赖关系时,可以通过可读的文本来配置,并且还能通过可视化工具对这些配置信息浏览和管理,从而提供对组件的管理水平。并且如果耦合关系需要变动,并不需要重新修改和编译源代码,这符合面向对象设计中的开闭原则。


同时,SpringIOC容器作为产品实现,设计了系列IOC容器,实现了对多种应用场景的适配。我们可以看到各种带有不同容器特征的实现:能够读取不同配置信息的容器设计;从不同I/O源读取配置信息的各种容器;更加面向框架的应用上下文的容器设计等。SpringIOC容器可以满足广大用户对IOC容器的各种使用需求。这时的SpringIOC容器,已经不是简单的Interface21框架,已经成为IOC容器的工业级实现。


总结:本文主要对Spring中的关键概念进行了解释。想了解具体实现的同学,可先阅读《Spring实战》或https://www.w3cschool.cn/wkspring/


参考:《Spring技术内幕》










相关文章
|
3天前
|
XML Java 数据格式
Spring容器的本质
本文主要讨论Spring容器最核心的机制,用最少的代码讲清楚Spring容器的本质。
|
16天前
|
XML Java 测试技术
Spring IOC—基于注解配置和管理Bean 万字详解(通俗易懂)
Spring 第三节 IOC——基于注解配置和管理Bean 万字详解!
103 26
|
2月前
|
Java Spring 容器
【SpringFramework】Spring IoC-基于注解的实现
本文主要记录基于Spring注解实现IoC容器和DI相关知识。
61 21
|
2月前
|
XML Java 数据格式
【SpringFramework】Spring IoC-基于XML的实现
本文主要讲解SpringFramework中IoC和DI相关概念,及基于XML的实现方式。
116 69
|
2月前
|
存储 Java 应用服务中间件
【Spring】IoC和DI,控制反转,Bean对象的获取方式
IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式
|
2月前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
2月前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
74 6
|
6天前
|
Ubuntu API 网络虚拟化
ubuntu22 编译安装docker,和docker容器方式安装 deepseek
本脚本适用于Ubuntu 22.04,主要功能包括编译安装Docker和安装DeepSeek模型。首先通过Apt源配置安装Docker,确保网络稳定(建议使用VPN)。接着下载并配置Docker二进制文件,创建Docker用户组并设置守护进程。随后拉取Debian 12镜像,安装系统必备工具,配置Ollama模型管理器,并最终部署和运行DeepSeek模型,提供API接口进行交互测试。
123 15
|
1月前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
159 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
1月前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
198 11