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技术内幕》










相关文章
|
19天前
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
116 18
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
|
6天前
|
XML Java 测试技术
spring复习01,IOC的思想和第一个spring程序helloWorld
Spring框架中IOC(控制反转)的思想和实现,通过一个简单的例子展示了如何通过IOC容器管理对象依赖,从而提高代码的灵活性和可维护性。
spring复习01,IOC的思想和第一个spring程序helloWorld
|
3天前
|
缓存 Java Spring
手写Spring Ioc 循环依赖底层源码剖析
在Spring框架中,IoC(控制反转)是一个核心特性,它通过依赖注入(DI)实现了对象间的解耦。然而,在实际开发中,循环依赖是一个常见的问题。
13 4
|
7天前
|
XML Java 开发者
经典面试---spring IOC容器的核心实现原理
作为一名拥有十年研发经验的工程师,对Spring框架尤其是其IOC(Inversion of Control,控制反转)容器的核心实现原理有着深入的理解。
29 3
|
20天前
|
Java 数据库连接 数据格式
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
IOC/DI配置管理DruidDataSource和properties、核心容器的创建、获取bean的方式、spring注解开发、注解开发管理第三方bean、Spring整合Mybatis和Junit
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
|
19天前
|
弹性计算 运维 持续交付
探索Docker容器化技术及其在生产环境中的应用
探索Docker容器化技术及其在生产环境中的应用
68 5
|
12天前
|
Linux iOS开发 Docker
Docker:容器化技术的领航者 —— 从基础到实践的全面解析
在云计算与微服务架构日益盛行的今天,Docker作为容器化技术的佼佼者,正引领着一场软件开发与部署的革命。它不仅极大地提升了应用部署的灵活性与效率,还为持续集成/持续部署(CI/CD)提供了强有力的支撑。
192 69
|
2天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker与Kubernetes入门
【9月更文挑战第30天】在云计算的浪潮中,云原生技术正以前所未有的速度重塑着软件开发和运维领域。本文将通过深入浅出的方式,带你了解云原生的核心组件——Docker容器和Kubernetes集群,并探索它们如何助力现代应用的构建、部署和管理。从Docker的基本命令到Kubernetes的资源调度,我们将一起开启云原生技术的奇妙之旅。
|
12天前
|
运维 Cloud Native Docker
云原生技术入门:Docker容器化实战
【9月更文挑战第20天】本文将引导你走进云原生技术的世界,通过Docker容器化技术的实战演练,深入理解其背后的原理和应用。我们将一起探索如何在云平台上利用Docker简化部署、扩展和管理应用程序的过程,并揭示这一技术如何改变现代软件的开发和运维模式。
|
7天前
|
Cloud Native 持续交付 Docker
云原生技术入门与实践:Docker容器化部署示例
【9月更文挑战第25天】在数字化转型的浪潮下,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,为初学者揭示云原生技术的核心概念及其应用价值。我们将以Docker容器为例,逐步引导读者了解如何将应用程序容器化,并在云端高效运行。这不仅是对技术趋势的跟随,更是对资源利用和开发效率提升的探索。
26 4
下一篇
无影云桌面