Spring Inversion of Control简称Spring IOC,是一种设计原则,其主导主导思想是:IOC通过自行去查找及注入所需的资源,如依赖对象、常量数据等,而不是在程序中主动去new对象,将对象的控制权从应用程序代码转移到外部容器,在代码中不需要直接创建和管理对象,从而实现对象之间的解耦(控制反转)。所以,IOC的核心概念是依赖注入(Dependency Injection,DI),查找和动态注入对象的过程就是DI,一旦注入完成,IOC容器提供全生命周期的服务。
好莱坞原则:不要给我们打电话,我们会给你打电话。 导演(上层)去联系(通知)演员,而不是演员去主动联系(轮询骚扰)导演。
在Spring框架的日常开发中,会经常遇到编写一个Bean、注入一个Bean、使用一个Bean、销毁一个Bean的情况,那么到底什么是一个Bean?
把Bean理解成豆还是有些抽象,如果把一个个Bean看成一个个基本组成部分,是不是瞬间具体化了许多。
如果把Spring比做成一个植物细胞,不同的细胞结构聚合在一起组成了一个细胞,液泡、细胞核、线粒体相当于一个个Bean,负责不同的分工,如同Spring中的业务逻辑对象、数据访问对象、控制器、服务、工具类等。
即:
如果把Spring比作一个细胞,各个Bean则相当于细胞内的器官和分子的功能,各个Bean配合完成维持生命体征各个的功能。
那么Bean工厂的作用是什么?
如果把Spring比作一个细胞,那么Bean工厂可以类比为细胞的细胞核,负责创建和管理细胞内各个分子及组件,调度它们的功能和行为。
Bean工厂的功能包括:
Spring DI(Dependency Injection)即控制反转,它用于解决对象之间的依赖关系,将一个对象所依赖的其他对象注入到它的属性、方法参数或构造函数中。对象间的依赖关系由容器管理,实现对象间解耦。
如果将Spring比作一个细胞,那么依赖注入(Dependency Injection,DI)的作用类似于细胞内的物质传递和分配。
类比细胞分裂复制的过程,细胞核在分裂过程中需要从线粒体获取能量和物质,但线粒体与细胞核并没有直接的联系。这种能量和物质的传递是由细胞内部统一调配的,类似地,Spring扮演着细胞内的角色,接管两个Bean之间的功能,通过依赖注入将需要的物料传递给目标对象。
就像细胞内部的调配系统一样,Spring作为一个容器,通过配置文件、注解或其他方式描述对象之间的依赖关系,并将依赖的对象动态地注入到目标对象中。这样,目标对象就能够获取所需的能量和物质,而无需自己关心依赖对象的创建和管理。这种解耦和统一调配的特性使得应用程序的开发更加灵活和可扩展。
因此,可以将依赖注入比作细胞内物质传递和分配的过程,通过Spring的依赖注入,对象之间的依赖关系得以解耦,由Spring负责提供和传递所需的物料,从而实现更加灵活和可维护的应用程序开发。