Spring学习-2-IOC&DI概述

IOC Inversion of Control

思想为反转资源获取的方向 传统的资源查找方式要求组件向容器发起请求查找资源,作为回应,容器适时的返回资源。而应用了IOC之后,则是容器主动地将资源推送给它管理的组件,组件所要做的仅是选择一种合适的方式来接受资源。这种行为也被称为查找的被动形式。

DI Dependency Injection IOC的另一种表述方式:即组件以一些预先定义好的方式(如setter方法)接受来自如容器的资源注入。

一个例子:

Class A{}
Class B{
    private A a;
    public void setA(A a){
        this.a = a;
    }
}

需求:从容器中获取B对象,并使B对象的a属性被赋值为容器A对象的引用

传统容器 A、B之间要构造出依赖关系需要手动创造对象

A a = getA();
B b = getB();
b.setA(a);

IOC容器

B b = getB();

不需要手动注入

IOC发展过程

一个场景:要交一个实验报告,实验报告有两种形式,pdf和HTML,它们实现了同一个接口。

  1. 当我需要生成一份实验报告的时候,我需要知道pdf格式、HTML格式和接口这三个类的所有实现细节,耦合度高。(不同格式的构造方法、使用方法、属性等等都可能不同,所以都需要具体实现)(是不是不使用接口就降低了一个耦合度呢 分离接口和实现以便代码复用)
  2. 同样的需求。采用工厂设计模式,不再关心不同格式的具体实现,将它们的创建都放到工厂方法中,然后需要创建时调用工厂方法即可。耦合度降低。
  3. 同样的需求。采用反转控制,不再需要工厂。容器提供所需要的对象。观察类图中的箭头方向可以看到和工厂设计模式的区别,工厂设计模式是主动的,需要什么找工厂要。反转控制则是被动的由容器注入。

类图如下
接口和实现的分离
工厂模式
反转控制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值