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
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值