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










相关文章
|
22天前
|
XML 缓存 Java
搞透 IOC、Spring IOC ,看这篇就够了!
本文详细解析了Spring框架的核心内容——IOC(控制反转)及其依赖注入(DI)的实现原理,帮助读者理解如何通过IOC实现组件解耦,提高程序的灵活性和可维护性。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
|
1月前
|
Java 测试技术 Windows
咦!Spring容器里为什么没有我需要的Bean?
【10月更文挑战第11天】项目经理给小菜分配了一个紧急需求,小菜迅速搭建了一个SpringBoot项目并完成了开发。然而,启动测试时发现接口404,原因是控制器包不在默认扫描路径下。通过配置`@ComponentScan`的`basePackages`字段,解决了问题。总结:`@SpringBootApplication`默认只扫描当前包下的组件,需要扫描其他包时需配置`@ComponentScan`。
|
13天前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
28 0
|
1月前
|
存储 开发框架 Java
什么是Spring?什么是IOC?什么是DI?IOC和DI的关系? —— 零基础可无压力学习,带源码
文章详细介绍了Spring、IOC、DI的概念和关系,解释了控制反转(IOC)和依赖注入(DI)的原理,并提供了IOC的代码示例,阐述了Spring框架作为IOC容器的应用。
31 0
什么是Spring?什么是IOC?什么是DI?IOC和DI的关系? —— 零基础可无压力学习,带源码
|
1月前
|
XML Java 数据格式
Spring IOC容器的深度解析及实战应用
【10月更文挑战第14天】在软件工程中,随着系统规模的扩大,对象间的依赖关系变得越来越复杂,这导致了系统的高耦合度,增加了开发和维护的难度。为解决这一问题,Michael Mattson在1996年提出了IOC(Inversion of Control,控制反转)理论,旨在降低对象间的耦合度,提高系统的灵活性和可维护性。Spring框架正是基于这一理论,通过IOC容器实现了对象间的依赖注入和生命周期管理。
67 0
|
1月前
|
XML Java 数据格式
Spring的IOC和AOP
Spring的IOC和AOP
48 0
|
9天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
37 2
|
19天前
|
Kubernetes 监控 开发者
掌握容器化:Docker与Kubernetes的最佳实践
【10月更文挑战第26天】本文深入探讨了Docker和Kubernetes的最佳实践,涵盖Dockerfile优化、数据卷管理、网络配置、Pod设计、服务发现与负载均衡、声明式更新等内容。同时介绍了容器化现有应用、自动化部署、监控与日志等开发技巧,以及Docker Compose和Helm等实用工具。旨在帮助开发者提高开发效率和系统稳定性,构建现代、高效、可扩展的应用。
|
15天前
|
关系型数据库 MySQL API
|
8天前
|
缓存 监控 开发者
掌握Docker容器化技术:提升开发效率的利器
在现代软件开发中,Docker容器化技术成为提升开发效率和应用部署灵活性的重要工具。本文介绍Docker的基本概念,并分享Dockerfile最佳实践、容器网络配置、环境变量和秘密管理、容器监控与日志管理、Docker Compose以及CI/CD集成等技巧,帮助开发者更高效地利用Docker。