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










相关文章
|
2天前
|
Java 测试技术 开发者
IoC容器有什么作用?
【4月更文挑战第30天】IoC容器有什么作用?
33 0
|
2天前
|
Java 测试技术 开发者
Spring IoC容器通过依赖注入机制实现控制反转
【4月更文挑战第30天】Spring IoC容器通过依赖注入机制实现控制反转
22 0
|
2天前
|
XML Java 数据格式
Spring框架入门:IoC与DI
【5月更文挑战第15天】本文介绍了Spring框架的核心特性——IoC(控制反转)和DI(依赖注入)。IoC通过将对象的创建和依赖关系管理交给容器,实现解耦。DI作为IoC的实现方式,允许外部注入依赖对象。文章讨论了过度依赖容器、配置复杂度等常见问题,并提出通过合理划分配置、使用注解简化管理等解决策略。同时,提醒开发者注意过度依赖注入和循环依赖,建议适度使用构造器注入和避免循环引用。通过代码示例展示了注解实现DI和配置类的使用。掌握IoC和DI能提升应用的灵活性和可维护性,实践中的反思和优化至关重要。
17 4
|
2天前
|
XML Java 程序员
Spring特性之二——IOC控制反转
Spring特性之二——IOC控制反转
16 4
|
2天前
|
安全 Java 开发者
在Spring框架中,IoC和AOP是如何实现的?
【4月更文挑战第30天】在Spring框架中,IoC和AOP是如何实现的?
23 0
|
2天前
|
Java 开发者 容器
IoC容器如何实现依赖注入?
【4月更文挑战第30天】IoC容器如何实现依赖注入?
21 0
|
2天前
|
XML Java 数据格式
如何配置IoC容器?
【4月更文挑战第30天】如何配置IoC容器?
20 0
|
2天前
|
监控 Kubernetes Docker
【Docker 专栏】Docker 容器内应用的健康检查与自动恢复
【5月更文挑战第9天】本文探讨了Docker容器中应用的健康检查与自动恢复,强调其对应用稳定性和系统性能的重要性。健康检查包括进程、端口和应用特定检查,而自动恢复则涉及重启容器和重新部署。Docker原生及第三方工具(如Kubernetes)提供了相关功能。配置检查需考虑检查频率、应用特性和监控告警。案例分析展示了实际操作,未来发展趋势将趋向更智能和高效的检查恢复机制。
【Docker 专栏】Docker 容器内应用的健康检查与自动恢复
|
2天前
|
Ubuntu Docker 容器
docker容器保存和导入
docker容器保存和导入
18 0
|
2天前
|
Ubuntu Docker 容器
清理docker容器
清理docker容器
12 0

热门文章

最新文章