Spring IoC容器、IoC与DI

这篇具有很好参考价值的文章主要介绍了Spring IoC容器、IoC与DI。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

Spring是什么?

理解容器 

什么是IoC(Inversion of Control)

传统的new创建对象的方式中类与类的耦合程度很大。 

IoC的优势: 

Spring IoC容器最核心的功能 

什么是DI (Dependency Injection)

IoC和DI的区别 


Spring是什么?

Spring是指Spring Framework(Spring框架),它是开源的框架,有着很庞大的社区,通过使用Spring可以使我们的开发变的更简单。一句话概括的话:Spring是包含众多工具方法的IoC容器。

理解容器 

容器就是用来容纳某种物品的基本装置。

像我们之前学过的List,Map等等都是用来容纳元素的容器,像Tomcat就是用来存放Web应用程序的容器。

什么是IoC(Inversion of Control)

翻译过来就是控制权反转 

在谈到IoC的时候,我们总是会和传统的new创建对象的方式进行比较。 

我们知道:

传统的new创建对象的方式中类与类的耦合程度很大。 

例如:我们要创建一个汽车模型,按照传统的方式我们是这样实现的:

Spring IoC容器、IoC与DI

正常流程我们会在每一层下面去new下一层的对象

public class Car {
    public static void main(String[] args) {
        Car car=new Car();
        car.Init();

    }
    //框架
    static class Frame{
        //车架初始化
        public void FrameInit(){
            //在车架中new 车轮
            Tire tire=new Tire();
            //调用初始化方法
            tire.TireInit();
            System.out.println("车架已完成初始化");

        }

    }
    //车轮
    static class Tire{
        //车轮初始化
        public void TireInit(){
            System.out.println("车轮已完成初始化");
        }
    }
    //Car初始化
    private void Init(){
        //new 下一层对象
        Frame frame=new Frame();
        //调用下一层对象的初始化方法
        frame.FrameInit();//这一层方法中会new下一层的对象并调用初始化方法
        System.out.println("车辆已完成初始化>>  车辆制作完成!");
    }
}

这个时候如果我们有了新的需求就会牵一发而动全身。耦合性太高了。比如我们要实现轮胎的尺寸定制。就需要每个类中都进行修改:

public class Car {
    public static void main(String[] args) {
        Car car=new Car();
        car.Init(50);

    }
    //框架
    static class Frame{
        //车架初始化
        public void FrameInit(int size){
            //在车架中new 车轮
            Tire tire=new Tire();
            //调用初始化方法
            tire.TireInit(size);
            System.out.println("车架已完成初始化");

        }

    }
    //车轮
    static class Tire{
        //车轮初始化
        public void TireInit(int size){
            System.out.println("车轮已完成初始化");
            System.out.println("轮胎的尺寸为:"+ size);
        }
    }
    //Car初始化
    private void Init(int size){
        //new 下一层对象
        Frame frame=new Frame();
        //调用下一层对象的初始化方法
        frame.FrameInit(size);//这一层方法中会new下一层的对象并调用初始化方法
        System.out.println("车辆已完成初始化>>  车辆制作完成!");
    }
}

 所以我们可以直接在每一层提供属性引用,直接指向下一层:

public class Car {
    //车架
    private Frame frame;
    //在构造方法中获得该车架
    public Car(Frame frame){
        this.frame=frame;
    }

    //在车的初始化方法中执行车架的初始化方法
    public void init(){
        frame.init();
    }

    //车架类
    static class Frame{
        //轮胎
        private Tire tire;
        //构造方法中获得该轮胎
        public Frame(Tire tire){
            this.tire=tire;
        }
        //在车架的初始化方法中调用轮胎的初始化方法
        public void init(){
            tire.init();
        }
    }

    //轮胎类
    static class Tire{
        //设置轮胎的属性
        private int size;
        //轮胎的尺寸
        public Tire(int size){
            this.size=size;
        }
        //轮胎的初始化方法
        public void init() {
            System.out.println("轮胎的大小是:"+this.size);
        }
    }

    public static void main(String[] args) {
        //创建轮胎类,制定轮胎大小
        Tire tire=new Tire(20);
        //创建车架类,轮胎作为属性传递进去
        Frame frame=new Frame(tire);
        //创建一个Car类,frame作为属性传递下去
        Car car=new Car(frame);
    }
}

这时候,如果我们还需要修改Tire,只需要改动两个地方:一个是Tire类属性,一个是main方法中的参数,然后中间的调用过程就不用修改了,这时候耦合性就降低下来了。 

这个时候我们再说说IoC:

IoC的优势: 

实现代码解耦,同时把对象(Bean)交给了IoC进行维护,与传统的方式相比,IoC不再是上级对象创建控制下一层对象了,而是把下一层的对象注入到上一级对象当中,所以IoC就是把控制对象生命周期的权利交给了IoC容器。

传统方式与IoC方式的对比:

Spring IoC容器、IoC与DI

Spring IoC容器最核心的功能 

管理对象(Bean)在Spring中的存取。 

什么是DI (Dependency Injection)

翻译过来就是依赖注入 ,指的就是把对象(Bean)注入到IoC容器当中,如果外面想要获取该对象,就需要从容器中取

IoC和DI的区别 

IoC是一种重要的思想,是Spring的核心思想之一。这种思想就是控制权反转,把对象(Bean)的生命周期交给IoC容器,而DI则是IoC思想的具体实现 。比如我今天的心情比较好,我想出去玩。我想出去玩就是IoC,就是思想和目标,而我想出去玩我可以去动物园玩,也可以去游乐场玩,这就是DI,也就是具体的实现。文章来源地址https://www.toymoban.com/news/detail-420492.html

到了这里,关于Spring IoC容器、IoC与DI的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 快速理解Laravel容器(IOC、DI、Provider、Contract)

    分享一些个人见解。 Laravel里面的某些概念,就像魔术一样,看起来很厉害,当知道魔术怎么变的,就会认为也不过如此。所以不必感觉Laravel里有些概念难以理解。 应当抛除被框架约束思维的枷锁,用PHP设计的角度去思考,关注大概,而不是在在框架层面逐行磨叽。毕竟源码

    2024年04月22日
    浏览(21)
  • Spring 6.X IoC 容器

    下面主要介绍 Spring 框架对控制反转 (IoC) 原理的实现 首先要说明的是:IoC 也称为依赖注入,这是一个过程。 其次依赖项的定义:对象仅通过构造函数参数、工厂方法的参数,或在构造对象实例、工厂方法返回后在对象实例上设置的属性来定义其依赖项(即它们使用的其他对

    2024年02月09日
    浏览(26)
  • 3、Spring 之IOC 容器 详解

    IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种 设计思想 ,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序。 Spring 通过 IoC 容器 来管理 所有 Java 对象的实例化和初始化 , 控制对象与对象之间的依赖关系 。我

    2024年02月09日
    浏览(28)
  • 深入理解Spring IOC

    🎉欢迎来到 Spring 专栏:深入理解Spring IOC 📜其他专栏:java面试 数据结构 源码解读 故障分析 系统设计 🎬作者简介:大家好,我是小徐🥇 ☁️博客首页:CSDN主页 小徐的博客 🌄每日一句: 好学而不勤非真好学者 📜 欢迎大家关注! ❤️ IOC 全称控制反转,英文名为 

    2024年01月21日
    浏览(35)
  • Spring 核心之 IOC 容器学习二

    Annotation 的前世今生 定位 Bean 扫描路径 读取 Annotation 元数据 扫描指定包并解析为 BeanDefinition

    2024年01月19日
    浏览(38)
  • Spring 核心之 IOC 容器学习一

    1、BeanFactory 其中 BeanFactory 作为最顶层的一个接口类,它定义了 IOC 容器的基本功能规范,BeanFactory 有三个重要的子类:ListableBeanFactory、HierarchicalBeanFactory 和 AutowireCapableBeanFactory。但是从类图中我们可以发现最终的默认实现类是 DefaultListableBeanFactory,它实现了所有的接口。 那

    2024年01月19日
    浏览(34)
  • spring6-实现简易版IOC容器

    我们都知道,Spring框架的IOC是基于Java反射机制实现的,下面我们先回顾一下java反射。 1、回顾Java反射 Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调

    2024年02月08日
    浏览(29)
  • Spring的简介ioc容器及注入方式

    Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。    Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。    然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Sprin

    2024年02月11日
    浏览(24)
  • Spring IOC 入门简介【自定义容器实例】

    目录 相关导读 1. Maven专栏系列文章 2. Mybatis专栏系列文章 3. Spring系列专栏文章 前言 Spring简介 Spring体系结构 一、IOC控制反转思想 二、IOC自定义对象容器 1. 创建实体类,Dao接口,实现类 2. 创建配置文件bean.properties 3. 创建容器管理类 4. 创建StudentService类 5. 测试方法 6. 测试结

    2023年04月21日
    浏览(28)
  • spring6-IOC容器

    IOC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序。 Spring 通过 IoC 容器来管理所有 Java 对象的实例化和初始化,控制对象与对象之间的依赖关系。我们将

    2024年02月08日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包