IOC思路

IOC程序开发思路过程:

首先,一般程序这么引用对象:

public class xfDetailActivity {
    private LineChart chart = new LineChart();
    chart.show();
}


优化一下,将具体的LineChart对象改为接口或抽象类Chart,这样就可以实例化LineChart、PieChart...等Chart的实现类或子类:

public class xfDetailActivity {
    private Chart chart = new LineChart();
    chart.show();
}

现在,是在xfDetailActivity中主动去分配LineChart给Chart变量,

如果有种方式,能由框架自己根据条件判断该用哪种Chart来实例化Chart变量,这是不是一种反转。

本来A创建B,现在C把B给A。这个C就是支持IOC的框架。

public class xfDetailActivity {
    private Chart chart;
    public xfDetailActivity(Chart chart){
        this.chart = chart;
    }
    chart.show();
}

上面的类中并没有指明是哪种Chart来实例化,由框架的配置文件的配置项来配置决定。

再比如网络请求类,声明一个网络请求接口有一个Post方法,具体实现类会有Mysql、Orical...等不同的实现类,代码调用不必在意是哪个实现类的Post方法,只需调接口类中的Post方法即可,具体是调的MySql类的Post还是Orical的Post,由配置文件来配置。

上面代码中展示的“构造方法注入”,显然有局限性,如果xfDetailActivity这个类需要10个不同的对象,那么要在构造方法传入10个参数吗?

为了优化,引入“属性注入”:

public class xfDetailActivity {
    private Chart chart;
    private Phone phone;
    public void setChart(Chart chart){
        this.chart = chart;
    }
    public void setPhone(Phone phone){
        this.phone = phone;
    }
    chart.show();
    phone.call();
}

为了方便统一管理xfDetailActivity类所需要注入的接口,我们声明一个类,单独列出所有需要注入的接口:

public interface xfDetailArrangable{
    void injectChart(Chart chart);
    void injectPhone(Phone phone);
}
然后xfDetailActivity实现这个管理接口:

public class xfDetailActivity implements xfDetailArrangable {
    private Chart chart;
    private Phone phone;
    public void injectChart(Chart chart){
        this.chart = chart;
    }
    public void injectPhone(Phone phone){
        this.phone = phone;
    }
    chart.show();
    phone.call();
}

spring提供了一种配置文件的方式完成管理接口(xfDetailArangable)的注入工作:
















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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值