IOC思路

来源:互联网 发布:连邦软件 cad 编辑:程序博客网 时间:2024/04/30 11:35

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
原创粉丝点击