zoukankan      html  css  js  c++  java
  • Spring IOC 理解

    首先创建2两矿泉水公司A和B。

    然后在创建Boss类相当于客户端程序。里面实例化了A公司,表示boss与A签订了一份协议。

    可是有一天,A公司该做饮料,不提供矿泉水了。于是boss去与B公司签了协议。

    Boss以为这次可以高枕无忧了,由于A公司经营不善,做饮料亏了,又改做矿泉水,为了提升业绩他们的水卖的比B公司便宜。Boss又想改回,买A公司的。

    为了避免折腾,老板对张三说:“以后水的事情就由你负责了,买哪家的水由你来决定”。这样boss与矿泉水公司的关系就变成间接的了。中间多了个张三。

     

    这样一来就重新设计:

    首先呢,要先设计一个接口,并且提供一个提供水服务的方法。    然后AB两家公司都来实现这个接口。

     public interface IWaterCompany {
     public Water getWater();
    }

    public class ACompany implements IWaterCompany {
        Water water;
     @Override
     public Water getWater() {
      System.out.println("A 公司的哦。。。");
      return water;
     }

    }

    public class BCompany implements IWaterCompany {
        Water water;
     @Override
     public Water getWater() {
      System.out.println("B 公司的哦。。。");
      return water;
     }
    }

    现在可以编写客户端程序调用它的服务了。这个客户端就是改写boss类。

    public class Boss {
    private IWaterCompany iwc;
    public void needWater(){
     getIwc().getWater();
    }
    public IWaterCompany getIwc() {
     return iwc;
    }
    public void setIwc(IWaterCompany iwc) {
     this.iwc = iwc;
    }
    }s

    那么接下来,A和B公司如何注入给Boss呢?下面写个测试类。

    public class ClientTest {
     public static void main(String[] args) {
          Boss boss = new Boss();
          boss.setIwc(new BCompany());
          boss.needWater();
     }
    }

    这里发现了一个重要的事情,Boss在这次变更中仍然完好无缺,也就是说这次变更他的内在结构,只要改变TestClient就可以了。TestClient就是充当张三这种角色。不过spring中不以客户端类存在,而是一个xml文件。通过这种接口隔离的方式实现控制反转。

  • 相关阅读:
    [Android编程心得]Debug的一些技巧
    理解WebKit和Chromium: Chromium for Android
    java compiler level does not match the version of the installed java project facet
    [Android编程心得]Activity的生命周期函数
    GDAL中的SURF算法
    SURF算法学习心得
    遥感图像处理流程
    软件界面建模浅析
    IsPostBack深入探讨
    自定义应用程序配置文件(app.config)
  • 原文地址:https://www.cnblogs.com/kunpengit/p/2250927.html
Copyright © 2011-2022 走看看