Spring IOC和DI的认识

IOC的认识

IOC是一种软件设计思想,意指控制反转,即将对象的控制反转给IOC容器,交由给IOC容器去控制管理。

这个对象的控制,包括以下几个方面:

  1. 对象的实例化。
  2. 对象的装配,属性注入。
  3. 对象的销毁。
  4. 对象的作用域,可使用范围。
  5. 等等。

那么将对象的控制权,反转给IOC,交由给IOC去管理,这样做的一个好处是,就是不再需要我们自己去编码,去实现对对象的控制。比如装配一个对象,需要先把这个对象所依赖的对象,new出来,然后再赋值给这个对象。这些对象构建的工作交由给IOC容器去实现即可。

总的来说,IOC是一种软件设计的思想,它将对象的使用,从传统硬编码的方式,反转交由给了IOC容器去控制管理,从而实现对对象的自动化控制。

而Spring IOC是IOC思想的具体实现,Spring IOC本身提供了对象控制的管理机制。

Spring IOC提供的机制包括以下几个方面,脑图如下:
在这里插入图片描述

对于我们来说,我们只需要在IOC容器所提供的这个机制的基础上,根据我们的需要,指定这个机制某些阶段的一些执行细节即可,比如指定某个Bean的生命周期为原型。如果不指定,那么就是使用的Spring IOC的默认配置了,比如Bean默认的生命周期是单例。

画个图表达下Spring IOC所发挥的角色,如下:

在这里插入图片描述

DI的认识

也解释下DI依赖注入吧。

DI也是一种软件设计思想。它的核心思想是将对象对其它对象的依赖,将依赖注入的这个工作交由给第三方去做。

这样做的一个好处,就是可以将依赖注入的这个动作,从业务代码中解耦出来。这样当需要修改依赖对象时,业务代码就不需要被修改了,我们直接去修改第三方即可。如果是传统的编码方式的话,比如有四个地方的业务代码都强耦合了依赖对象,那么在遇到需要修改依赖对象的情况时,我们就需要在这些地方一个个的修改,但如果解耦出来的话,我们直接去更新第三方即可。这个第三方,就相当于是一个对象注入的统一入口。

这就是DI,依赖注入所想要解决的问题,通过依赖对象的解耦,使代码变得更灵活。

那么这个第三方的具体实现,就比如IOC容器,或者说Spring IOC容器,它实现了对象自动装配,依赖注入的这个工作,作为对象依赖注入的统一入口。

在这里插入图片描述

举例来说,当我们想要修改程序所使用的依赖对象时,比如BeanA改为用BeanB,那么由于对象依赖的解耦,我们直接去更新第三方即可。

示例如下。

业务代码:

@Service
public class MyBeanService {
    private final MyBean myBean;
    @Autowired
    public MyBeanService(MyBean myBean) {
        // 自动依赖注入。更新依赖,不需要修改此处的代码
        this.myBean = myBean;
    }

指定IOC容器自动装配Bean的配置文件:

@Configuration
public class MyBeanConfig {
    @Bean
    public MyBean myBean() {
        // return new BeanA();
        // 修改为使用BeanB
        return new BeanB();
    }
}

显然看到这里,我们也可以了解到,Spring DI实现的基础,是建立在Spring IOC容器上的。或者说,Spring DI是Spring IOC功能实现的一部分。

以上总结

所以,看到这里我们可以明白,Spring框架为我们提供了一个良好的开发环境,通过引入IOC和DI设计思想的实现,使我们对对象的使用,变得更加自动化。在提高我们开发效率的同时,通过DI解耦,也降低了对象依赖关系硬编码导致的强耦合,使我们的程序代码变得更灵活。

  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值