Spring - 贯穿始终的IoC思想

前言

Spring中IoC是一个很重要的思想,贯穿了整个Spring Framework,可以说是Spring中的核心思想


什么是IoC

IoC:Inversion of Control,控制反转,是面对对象的一种设计原则

什么是控制反转呢?从字面上看,是将反转了事物的控制权,通俗说:
不用自己创建对象,将创建操作交给容器,由容器注入到我们需要的地方

我们从主动创建对象,到被动接受对象,不用自己创建,这就是反转

Spring框架中,由Spring IoC容器来负责控制对象的生命周期和对象间的关系

这是一种设计模式,只是出现的比较晚,没有在Gof中


主动

在学习Java基础的过程中,我们一直都是主动的去创建对象,然后使用对象

举一个简单的例子,我们想要喝啤酒

主动方法:自己new一个啤酒,就可以喝了

啤酒类Beer:

package com.learn.pojo;

public class Beer {
    public void toDrink(){
        System.out.println("喝啤酒");
    }
}

人Person:

package com.learn.pojo;


public class Person {

    private Beer beer= new Beer();

    public void drink(){
        beer.toDrink();
    }
}

测试:

package com.learn.pojo;

public class Test{
    public static void main(String[] args) {
        new Person().drink();
    }
}

这样就可以喝到啤酒了,类似与我们自己制作了啤酒

简单,但是耦合度太高了,是我们主动去依赖了一个啤酒类


依赖反转,被动

当我们去一个酒吧,叫服务员,服务员就会把啤酒给我们,不需要我们手动去自己弄一杯啤酒

这就是控制反转,由容器注入给我们需要的地方

修改一下上面的类:

Person类:

package com.learn.pojo;


public class Person {

    private Beer beer;

    public void setBeer(Beer beer) {
        this.beer = beer;
    }

    public void drink(){
        beer.toDrink();
    }
}

我们提供了setter方法注入(实际上Spring还可以构造器注入)

由服务员Waiter帮我们注入:

package com.learn.pojo;

public class Waiter {


    public void injection(Person person){
        Beer beer = new Beer();
        person.setBeer(beer);
    }

}

现在我们的就可以不用自己创建对象了

package com.learn.pojo;

public class Test {
    public static void main(String[] args) {
        Waiter waiter = new Waiter();
        Person person = new Person();
        waiter.injection(person);
        person.drink();
    }
}

在这个例子中,好像更繁琐了?不仅类的内容多了,还多了个Waiter

这一切都是为了解耦合,将对象的创建隐藏,我们只需要关注我们的业务即可

而且Spring的IoC容器是很精妙的,完全封装,程序员只需要调用API


依赖查找(DL)、依赖注入(DI)

既然有了IoC思想,那么就需要去实现IoC思想
Spring提供了依赖查找(Dependency Lookup)、依赖注入(Dependency Injection)两种技术

依赖查找(Dependency Lookup):容器中的受控对象通过容器的API来查找自己所依赖的资源和协作对象。这是一种比较传统的IoC实现方式,已经几乎淘汰,因为侵入性,使用到了容器的API,造成了我们无法在容器外使用和测试对象

依赖注入(Dependency Injection):依赖注入就是将服务注入到使用它的地方。对象只提供普通的方法让容器去决定依赖关系,容器全权负责组件的装配,可以通过Setter方法或者构造器注入

我们前面的例子就是依赖注入

在这里插入图片描述


总结

IoC:控制反转,是将对象的创建隐蔽,反转了获得依赖对象的方式

实现IoC有两种方式:依赖查找、依赖注入
依赖查找因为需要调用容器的API,侵入式的,已经几乎被淘汰了
依赖注入是由容器决定依赖关系,容器复制将需要注入的对象注入

一切都是为了解耦合

关于IoC网上有许多见解,仁者见仁智者见智

学海无涯苦作舟

都看到这了,点个赞呗(^_−)☆

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值