栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

IOC和DI分析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

IOC和DI分析

IOC和DI的理解 IOC和DI的概念

IOC(Inversion of Control) :控制反转
就是把对象的创建以及依赖交由IOC容器来管理,对象内部不再需要直接New对象。
DI(Dependency Injection) : 依赖注入
对象内部需要其他对象的支持,则容器将自动把所需的对象提供给对象

举一个生活中的例子: 传统情况下:

在以前没有网购的时候,我们需要一件商品,我们都会主动去商店那购买。

这就有点像,我们在一个Java类中,如果需要一个其他的类的支持,我们就需要去new这个类

public class Test {
    public static void main(String[] args) {
        ClassA a = new ClassA();
    }
}
IOC情况下:

现在是网购的时代,我们需要一件商品,我们可以直接去网购平台网购,手指点一下下单,就有快递员把商品送到家门口了。

这里说的网购平台,就有点像IOC容器了。而快递员把商品送到家门口,就像是依赖注入。

现在我们在某一个类中,如果需要其他类的支持,就不再需要直接去new这个类的实例,而是由IOC容器提供给我们

由IOC容器来管理类

public class IOC {
    public static Object getBean(String beanName) {
        if (beanName.equals("ClassA")) {
            return  new ClassA();
        }
        if (beanName.equals("ClassB")) {
            return  new ClassB();
        }
        return null;
    }
}

当我们需要某一个类时,可以由第三方容器提供给我们,不需要我们直接去new对象实例

public class Test {
    public static void main(String[] args) {
        // 依赖注入
        ClassA a = IOC.getBean("ClassA");
    }
}
为什么需要IOC和DI呢

在没有IOC的时候,我们需要其他类的支持,就要手动去new其他类的实例,这样会造成代码的耦合性过高,如果当我们的需求发生改变,我们就需要去修改源代码,造成很多不便。
比如一个接口A,名叫InterfaceA
这个接口有一个实现类,名叫是InterfaceAImpl
如果我们不使用IOC去管理的话
那么就是

InterfaceA a = new InterfaceAImpl()

如果我们在很多类都这样去直接new实现类
当我们需求发生改变,我们又开发了新的接口A的实现类InterfaceAaImpl
那么我们就要去修改源代码

InterfaceA a = new InterfaceAaImpl()

非常的麻烦

如果我们使用了IOC
我们只需要把接口的实现类交由IOC容器去管理
当我们更改了接口的实现类,我们只需要修改容器对应的配置,即可切换新的接口实现类了,
这样IOC容器就会自动把新的实现类注入到所需的地方

另外补充一下,IOC是一种思想,而DI才是实现IOC思想的一种方式之一

下面是我画的图,来进一步解释IOC和DI

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/874410.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号