Spring学习(2)- IoC和DI到底是个什么?

IoC和DI到底是什么

通过例子来讲。
没有spring之前,项目是什么样呢?
经历过一个jsp+servlet老项目的洗礼,有了点认识。
某个对象实例,里面依赖了其他类的实例,要调用实例方法。

public class Main{
    public static void main(String []args){
        Person jack = new Person();
        //jack now need a washer to wash Clothes.
        //1. 传统的new一个washer,给到jack
        //2. 在jack被创建的时候,spring根据他对Waher的依赖关系
        //   就已经提前创建好了一个washer
    }
}
class Person{
    private Washer washer;
    private setWasher(Washer washer){
        this.washer = washer;
    }
    void washClothes(){  washer.washClothes()  }
}
class Washer {
    void washClothes(){ System.out.println(" wash clothes") }
}

1.以往方法:程序员需要写new()。编译后的程序执行到此,才能识别并执行。

//new出来这个洗衣机对象(每次都是不同的)
washer = new Washer();
jack.setWahser(washer);
jack.washClothes();

2.用Spring:配置好。类都编译成了字节码。Spring已经提前了解到了这种依赖。

//call the spring: hey! spring! give me the washer!
//jack has already been provided a washer by spring IoC Container
jack.washClothes();
//可以在配置spring的时候,指定是重复使用一个,还是每次都不同。
  • 控制反转Ioc(Inverse of Control)
    代码上看,就是写代码的时候,程序员不用写new了。Spring将会按照配置,自动创建对象并提供对象。对象创建的控制权,就从程序员写的new,转交给了提前配置好的Spring框架。这就实现了某种意义上的控制反转。

  • 依赖注入
    例子中的jack,有个Washer类实例。也就是产生了对Washer的依赖。
    Spring框架通过配置文件,理解了依赖。并自动创建了对象,将依赖注入到了Person类实例jack里。这是我理解的依赖注入。
    注入的不仅仅可以是某个特定的类对象。也可以是接口声明。

这个例子,当然是有不足的。模拟生活中的一个场景。
jack家里有几台washer,每台washer的洗衣程序不同。他不必关注用哪台washer。他只关注可以洗衣服就好了。
也就是应该有个WashAble接口,这个接口定义一个wash接口。实现这个接口的类,都可以有自己的wash实现。
Spring可以根据接口创建实例。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值