Java开发为何深入人心 ?我来带你解开 Spring、IoC、DI 的秘密~

目录

一、什么是Spring?

1.1、什么是容器?

1.2、IoC是什么?

1.3、IoC带来了什么好处?

二、什么是DI?

2.1、IoC和DI有什么关系?


一、什么是Spring?

        一句概括,Spring 是包含了众多⼯具⽅法的 IoC 容器;

那么什么是IoC?什么是容器?

1.1、什么是容器?

        容器就是用来装某种物品的装置;例如我们所学的List,Map这种数据容器,生活中我们装水的容器杯子......

1.2、IoC是什么?

        IoC——Inversion of Control,也就是控制反转,他并不是什么技术,而是一种设计思想;简单理解,IoC思想表达的含义就是把你设计好的对象交给容器来控制,而不是像传统的在对象内部进行控制;

何为控制?要控制什么?控制就是对象的创建、初始化、销毁;传统的,创建对象是new、初始化是同各国构造器或setter赋值、销毁对象我们会直接赋值null;IoC呢?现在所有权力交由给Spring容器,也就是说,现在Spring掌握了对象的生命周期,不再是我们程序员了,何为反转?想必以及心中有数了~,反转就是,我们由对象的控制者变成了IoC的被动接受者,对象的控制权由我们程序员交给了Spring,我们甚至无法预知,全听Spring的节奏;

        举个栗子,同样是向水杯这个容器里加入水,我有两种不同的思路,一种是传统的, 一种是IoC的;

如下代码(传统的):

//杯子
class Cup {
    private Goods goods;
    public Cup(String one) {
        this.goods = new Goods(one);
    }
    public void init() {
        System.out.println("杯子初始化完成");
        goods.init();
    }
}

//放入杯子的物品
class Goods {
    private String one;
    public Goods(String one) {
        this.one = one;
    }
    public void init() {
        System.out.println("物品初始化为:" + one);
    }
}

如下代码(IoC):

//杯子
class Cup {
    private Goods goods;
    public Cup(Goods goods) {
        this.goods = goods;
    }
    public void init() {
        System.out.println("初始化Cup");
        goods.init();
    }
}

//物品
class Goods {
    private String one;
    public Goods(String one) {
        this.one = one;
    }
    public void init() {
        System.out.println("物品初始化为:" + one);
    }
}

我们来对比一下:

1.3、IoC带来了什么好处?

总的来说有两点:

第一,资源集中管理,实现资源的可配置和易管理。

  • 方便管理:例如我们只需要向 Spring 中注入对象,或者拿到对象,通过 @Autowired 将对象作为属性注入到我们想注入的类中。
  • 可配置:我们可以通过设置 Bean 对象的作用域,来配置这些对象为单例或是多例等等。


第二,降低了使用资源双方的依赖程度,也就是我们说的解耦合。

例如,现在有 类A、类B、类C...  然后你在 类B 中需要使用到 类A、在 类C 中需要使用到 类A,在.......  也就是说很多类中都需要使用到 类A.

  • 传统的:我们会直接在其他类中 new 出 类A,但是这样就会导致一个问题——一旦 类A 的构造参数修改了,就需要在所有创建 类A 的地方进行修改.
  • IoC 容器:而使用 IoC 容器了之后,你只需要在将 Bean 对象注入到容器中的时候统一进行修改即可.  将来哪里需要使用,直接进行依赖注入即可. 

二、什么是DI?

        DI—Dependency Injection,即“依赖注入”

        一句概括,在程序运行期间,动态地将某种依赖关系注⼊到对象之中

        

2.1、IoC和DI有什么关系?

        IoC是一种设计思想,DI是具体实现技术,将这种理论思想变成了实践。例如:“今天学习真辛苦,准备吃顿好的,于是,晚上我去吃了火锅”;准备吃顿好的 就是目标和思想(IoC),晚上吃了火锅 就是具体实现(DI);具体的,你把依赖交给容器,容器帮你管理依赖,这就是依赖注入的核心,这样做,降低了开发的成本,提高了代码的复用率,提高了软件的灵活性

        要说具体的区别,emm 是有的,IoC强调的是容器中对象的控制权发生了发生反转,而DI强调的是动态的将依赖关系注入对象;广义上,IoC是一种软件开发模式,DI便是最深得人心的一种;


        

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
javaEE_SSH_mysql码头船只出行及配套货柜码放管理系统的设计与实现(源码+数据库sql+lun文+视频齐全)javaEE_SSH_mysql码头船只出行及配套货柜码放管理系统的设计与实现(源码+数据库sql+lun文+视频齐全)javaEE_SSH_mysql码头船只出行及配套货柜码放管理系统的设计与实现(源码+数据库sql+lun文+视频齐全)javaEE_SSH_mysql码头船只出行及配套货柜码放管理系统的设计与实现(源码+数据库sql+lun文+视频齐全)javaEE_SSH_mysql码头船只出行及配套货柜码放管理系统的设计与实现(源码+数据库sql+lun文+视频齐全)javaEE_SSH_mysql码头船只出行及配套货柜码放管理系统的设计与实现(源码+数据库sql+lun文+视频齐全)javaEE_SSH_mysql码头船只出行及配套货柜码放管理系统的设计与实现(源码+数据库sql+lun文+视频齐全)javaEE_SSH_mysql码头船只出行及配套货柜码放管理系统的设计与实现(源码+数据库sql+lun文+视频齐全)javaEE_SSH_mysql码头船只出行及配套货柜码放管理系统的设计与实现(源码+数据库sql+lun文+视频齐全)javaEE_SSH_mysql码头船只出行及配套货柜码放管理系统的设计与实现(源码+数据库sql+lun文+视频齐全)javaEE_SSH_mysql码头船只出行及配套货柜码放管理系统的设计与实现(源码+数据库sql+lun文+视频齐全)javaEE_SSH_mysql码头船只出行及配套货柜码放管理系统的设计与实现(源码+数据库sql+lun文+视频齐全)javaEE_SSH_mysql码头船只出行及配套货柜码放管理系统的设计与实现(源码+数据库sql+lun文+视频齐全)javaEE_SSH_mysql码头船只出行及配套货柜码放管理系统的设计与实现(源码+数据库sql+lun文+视频齐全)javaEE_SSH_mysql码头船只出行及配套货柜码放管理系统的设计与实现(源码+数据库sql+lun文+视频齐全)javaEE_SSH_mysql码头船只出行及配套货柜码放管理系统的设计与实现(源码+数据库sql+lun文+视频齐全)javaEE_SSH_mysql码头船只出行及配套货柜码放管理系统的设计与实现(源码+数据库sql+lun文+视频齐全)javaEE_SSH_mysql码头船只出行及配套货柜码放管理系统的设计与实现(源码+数据库sql+lun文+视频齐全)javaEE_SSH_mysql码头船只出行及配套货柜码放管理系统的设计与实现(源码+数据库sql+lun文+视频齐全)javaEE_SSH_mysql码头船只出行及配套货柜码放管理系统的设计与实现(源码+数据库sql+lun文+视频齐全)javaEE_SSH_mysql码头船只出行及配套货柜码放管理系统的设计与实现(源码+数据库sql+lun文+视频齐全)

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈亦康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值