Spring容器 IoC思想 DI实现

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Spring容器 IoC思想 DI实现

Spring


Spring 指的是 Spring Framework ,翻译过来就是Spring框架。是一个支持广泛应用场景的开源框架。


而其功能可以用一句话总结:“Spring是包含了众多工具方法的Ioc的容器”


  • 容器:容器是 来容纳某种物品的(基本)装置 --- (百度百科)

  • Spring 是Web容器

  • List/Map 是数据存储容器

  • Spring是一个IoC容器

IoC


定义


全拼:Inversion of Control 翻译: "控制反转"

其实IoC是一种思想,一个重要的面向对象的法则,它能指导我们如何设计出松耦合,更优良的程序。


对IoC的代码理解


假设我们对一个物品进行包装 物品(外包装-->内包装--->产品)。他们之间具有 耦合关系


  1. 传统思想写这个代码,创建三个类


public class Product {
    int size;//物品的大小
    public Product(int size) {
        this.volume = size;
    }
}
----------------------------------------------------------
public class InnerPacking {
    int size;
    public InnerPacking(int size) {
        Product product = new Product(size);
    }
}
----------------------------------------------------------
public class OuterPacking {
    int size;
    //我自己造一个对象
    public OuterPacking(int size) {
        InnerPacking innerPacking = new InnerPacking(size);
    }
}
----------------------------------------------------------
//使用main方法 new 一个 拥有内外包装的物品
    public static void main(String[] args) {
        OuterPacking outerPacking = new OuterPacking(10);
    }
  1. 使用IoC思想 去解决这个问题
public class Product {
    int size;//物品的大小
    public Product(int size) {
        this.size = size;
        System.out.println("Product完成");
    }
}
----------------------------------------------------------
public class InnerPacking {
    Product product;
    public InnerPacking(Product product) {
        this.product = product;
        System.out.println("InnerPacking完成");
    }
}
----------------------------------------------------------
public class OuterPacking {
    InnerPacking innerPacking;
    //你给我一个对象,我对这个对象进行操作
    public OuterPacking(InnerPacking innerPacking) {
        this.innerPacking = innerPacking;
        System.out.println("OuterPacking完成");
    }
}
----------------------------------------------------------
    public static void main(String[] args) {
        //假设我们在这里我们做一个完整包装的产品(new 一个拥有双层包装的产品)
        Product product = new Product(12);
        InnerPacking innerPacking = new InnerPacking(product);
        OuterPacking outerPacking = new OuterPacking(innerPacking);
    }


这两种大致对比而言:


  • 老思想:A需要B ,A自己去造一个类
  • IoC:A需要B,你给我传一个B


注入方式(传递方式)发生了改变,由注入属性自己造 变成 直接注入类,而这种改变就使得程序进行解耦,对应到现实生活中,我们可以把产品外包给包装厂,我们不用管颜色,包装纸的大小等等东西,而包装厂只需要我们的产品即可。


在大型项目中,这种思想是非常重要的,如果传统的方式,改一个小东西大片代码都需要改动,而IoC思想改动需要改动的部分即可。


这就是一种降低耦合的代码思想,这种思想称之为 IoC,意为“控制反转”。


  • 反转:容器来帮忙创建及注入依赖对象
  • 正转:在对象中主动控制去直接获取依赖对象


DI


DI 是 Dependency Injection 的缩写,翻译是“依赖注入”的意思。

广义上来讲,DI 等同于 IoC,但是IoC 是“目标”也是一种思想,而目标和思想只是一种指导原则,最终还是要有可行的落地方案,而 DI就属于具体的实现。

IoC (控制反转) 这种解耦合的思想,可以通过DI (依赖注入)的方式实现。

举个生活例子来说就是:生病了吃药(指导思想) 感冒就喝999感冒灵颗粒(具体方案实现)


再看Spring


当我们大概的了解了 IoC 控制反转 DI 依赖注入 这些名词的时候


我们再回过头来看定义:“Spring是包含了众多工具方法的Ioc的容器”


上述的代码 我们感受到了 IoC思想,而Spring 就是 IoC 的容器,也就是我们一直提到的 控制权从程序员到容器。

在学习Spring之前,我们写一个项目,如果A需要使用到B,那么我们自己就new object() 把对象给创建出来,而Spring框架就不需要,Spring这个容器会有我们使用的B,只需要在这个容器中直接把B拿出来使用即可,Spring是怎么创建这个B,什么时候创建的B都不需要我们操心,A中也不需要管一些创建B的细节问题,A只管用B就完了。

也就是说 以前的我们自己创建,我们控制一切,用了Spring以后,容器操心,我们只管用。


控制的什么反转了 ? 获得依赖对象的方式反转了。自己获得 和 直接拿的区别。

相关文章
|
28天前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
|
1月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
308 2
|
5月前
|
XML 人工智能 Java
Spring IOC 到底是什么?
IOC(控制反转)是一种设计思想,主要用于解耦代码,简化依赖管理。其核心是将对象的创建和管理交给容器处理,而非由程序直接硬编码实现。通过IOC,开发者无需手动new对象,而是由框架负责实例化、装配和管理依赖对象。常见应用如Spring框架中的BeanFactory和ApplicationContext,它们实现了依赖注入和动态管理功能,提升了代码的灵活性与可维护性。
181 1
|
XML Java 数据格式
京东一面:spring ioc容器本质是什么? ioc容器启动的步骤有哪些?
京东一面:spring ioc容器本质是什么? ioc容器启动的步骤有哪些?
|
6月前
|
XML Java 数据格式
Spring IoC容器的设计与实现
Spring 是一个功能强大且模块化的 Java 开发框架,其核心架构围绕 IoC 容器、AOP、数据访问与集成、Web 层支持等展开。其中,`BeanFactory` 和 `ApplicationContext` 是 Spring 容器的核心组件,分别定位为基础容器和高级容器,前者提供轻量级的 Bean 管理,后者扩展了事件发布、国际化等功能。
|
8月前
|
Java 容器 Spring
什么是Spring IOC 和DI ?
IOC : 控制翻转 , 它把传统上由程序代码直接操控的对象的调用权交给容 器,通过容器来实现对象组件的装配和管理。所谓的“控制反转”概念就是对组件对象控制权的转 移,从程序代码本身转移到了外部容器。 DI : 依赖注入,在我们创建对象的过程中,把对象依赖的属性注入到我们的类中。
|
9月前
|
XML Java 测试技术
Spring IOC—基于注解配置和管理Bean 万字详解(通俗易懂)
Spring 第三节 IOC——基于注解配置和管理Bean 万字详解!
614 26
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
XML Java 数据格式
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
109 1
|
XML druid Java
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
192 0