[Spring实战系列](4)Spring IOC容器

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/50617884 IOC(Inversion of Control)控制反转。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/50617884
IOC(Inversion of Control)控制反转。在Java开发中,IOC意味着控制权的转移,应用程序本身不负责依赖对象的创建和维护。而是由外部容器负责创建和维护。

2004年,Martin Fowler探讨了同一个问题,既然IOC是控制反转,那么到底是"哪些方面的控制被反转了呢?",经过详细的分析和论证后,得出答案:" 获得依赖对象的过程被反转了"。控制被反转之后, 获得依赖对象的过程由自身管理变为了由IOC容器主动注入。于是他给"控制反转"取了一个更合适的名字,叫做"依赖注入"。他的这个答案,实际上给出了实现IOC的方法:注入。所谓依赖注入,就是由IOC容器在运行期间,动态的将某种依赖关系注入到对象之中。

  • 控制权的转变IOC意味着控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是由外部容器负责创建和维护传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;现在IOC是有专门一个容器来创建这些对象,即由IOC容器来控制对象的创建;
  • 何是反转:传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;

我们拿一个现实生活中的例子来说明:
没有房屋地产商的时候,我们结婚需要房子住,怎么办呢?只能去自己盖一个房子。现在情况不同了,有了房屋地产商,我们自己不需要盖房子,只需要房屋地产商盖完房子,交上钱,挑一套自己喜欢的住就可以了。房屋地产商联系了我们与房子之间的关系,相对应的,IOC容器联系了对象与依赖对象之间的关系。



那具体什么是IOC容器呢?它在Spring框架中到底长什么样?说了这么多,其实对IOC容器的使用者来说,我们常常接触到的 BeanFactory和ApplicationContext都可以看成是容器的具体表现形式。这些就是IOC容器,或者说在Spring中提IOC容器,从实现来说,指的是一个容器系列。这也就是说,我们通常所说的IOC容器,如果深入到Spring的实现去看,会发现IOC容器实际上代表着一系列功能各异的容器产品。只是容器的功能有大有小,有各自的特点。打个比方来说,就像是百货商店里出售的商品,我们举水桶为例子,在商店中出售的水桶有大有小;制作材料也各不相同,有金属的,有塑料的等等,总之是各式各样,但只要能装水,具备水桶的基本特性,那就可以作为水桶来出售来让用户使用。这在Spring中也是一样,它有各式各样的IoC容器的实现供用户选择和使用;使用什么样的容器完全取决于用户的需要,但在使用之前如果能够了解容器的基本情况,那会对容器的使用是非常有帮助的;就像我们在购买商品时进行的对商品的考察和挑选那样。 

从上面叙述中也可以看出,并不存在单一的Spring容器。Spring容器自带了几种 容器实现,可以归纳为两种类型:
  • Bean 工厂(Bean Factory,由org.springframework.beans.factory.BeanFactory 接口定义)是最简单的容器,提供基本的DI 支持;
  • 应用上下文(application由org.springframework.context.ApplicationContext 接口定义);

基于BeanFactory 之上构建,并提供面向应用的服务,例如从属性文件解析文本信息的能力,以及发布应用事件给感兴趣的事件监听者的能力。 虽然我们可以在Bean 工厂和应用上下文两者之间任选一种,但Bean 工厂对于大多数应用来说往往太低级了,因此应用上下文要比Bean 工厂更受欢迎。我们会把精力集中在应用上下文的使用上,不再浪费时间讨论Bean 工厂。






目录
相关文章
|
23天前
|
XML Java 数据格式
【SpringFramework】Spring IoC-基于XML的实现
本文主要讲解SpringFramework中IoC和DI相关概念,及基于XML的实现方式。
108 69
|
21天前
|
Java Spring 容器
【SpringFramework】Spring IoC-基于注解的实现
本文主要记录基于Spring注解实现IoC容器和DI相关知识。
50 21
|
27天前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
1月前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
60 3
实战~如何组织一个多容器项目docker-compose
|
26天前
|
存储 Java 应用服务中间件
【Spring】IoC和DI,控制反转,Bean对象的获取方式
IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式
|
1月前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
66 6
|
1月前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
161 7
|
1月前
|
存储 缓存 Java
Spring面试必问:手写Spring IoC 循环依赖底层源码剖析
在Spring框架中,IoC(Inversion of Control,控制反转)是一个核心概念,它允许容器管理对象的生命周期和依赖关系。然而,在实际应用中,我们可能会遇到对象间的循环依赖问题。本文将深入探讨Spring如何解决IoC中的循环依赖问题,并通过手写源码的方式,让你对其底层原理有一个全新的认识。
65 2
|
1月前
|
安全 Java 开发者
Spring容器中的bean是线程安全的吗?
Spring容器中的bean默认为单例模式,多线程环境下若操作共享成员变量,易引发线程安全问题。Spring未对单例bean做线程安全处理,需开发者自行解决。通常,Spring bean(如Controller、Service、Dao)无状态变化,故多为线程安全。若涉及线程安全问题,可通过编码或设置bean作用域为prototype解决。
41 1
|
8月前
|
XML Java 数据格式
Spring IoC容器初始化过程(xml形式)
Spring IoC容器初始化过程(xml形式)
92 0