Spring IoC

Spring IoC概述java

     springIoc(控制反转)是一个比较抽象的概念,spring

  好比:在实际生活中,咱们想喝杯橙汁,在没有饮品店的日子里,最直观的作法就是,要买榨汁机、橙子、水。这里就是本身主动创造的过程,也就是一杯橙汁须要主动创造。工具

  然而到了今时今日,因为饮品店的盛行,已经没有必要本身去榨橙汁了。想喝橙汁的第一想法就是找到饮品店的联系方式(美团或者饿了么),而后描述你的须要、地址、电话等,下单等待,过会就会有人送上橙汁。这里你并无主动创造橙汁,也就是橙汁是由饮品店创造的,而不是你,可是也彻底达到了你的要求。ui

  为了更好的阐述抽象描述,我用java代码的形式模拟主动建立和被动建立的过程。
spa

  若是须要橙汁,那么至关于须要橙子、开水、糖等 原料,还有榨汁机这个工具,那咱们则建立对应的对象——JuiceMaker 和 Blender code

  主动建立对象xml

/***榨汁机***/
public class Blender {
    public String mix(String water , String fruit , String sugar){
        String juice = "这是一杯由液体" + water +"\n 水果:" + fruit +
                "\n糖量" +sugar + "\n组成的果汁";
        return juice;
    }
}

/***果汁生成器***/
public class JuiceMaker {
    private Blender blender = null;
    private String water;
    private String fruit;
    private String sugar;

/***set、get方法***/

   public String makeJuice(){
        blender = new Blender();
        return blender.mix(water , fruit ,sugar);
    }
}

 

  主动创造橙汁,须要咱们实行本身可能不太熟悉的工做——如何搅拌橙汁,好比这里的 mix 方法,显然不是个好方法,而对象果汁(juice) 是须要依赖于水 (water)、水果(fruit)、糖(sugar)和 榨汁机(blender)去实现的。对象

  被动建立对象blog

  假设已经提供了榨汁机(JuiceMaker2),那么只须要对其进行描述就能获得果汁了。假设饮品店给咱们提供了这样的描述(Source)get

  

public class JuiceMaker2 {

    private String beverageShop = null;
    private Source source = null;

    /***get、set 方法***/    
  
    public String makeJuice(){
        String juice = "这是一杯" + beverageShop + "饮品店,提供" +
                source.getSize() + source.getSugar() +source.getFruit();
        return  juice;
    }
}

public class Source {
    private String fruit; //类型
    private String sugar;//糖分
    private String size;//大小杯

/***get、set 方法***/ 

}

 

  显然咱们并不须要去关注果汁是如何被制造出来的,系统采用XML对这个清单进行描述

<bean id="source" class="com.todo.pojo.Source">
        <property name="fruit" value="橙汁"/>
        <property name="sugar" value="少糖"/>
        <property name="size" value="大杯"/>
</bean>

  这里对果汁进行描述,接着须要选择饮品店 

    <bean id="juiceMaker2" class="com.todo.pojo.JuiceMaker2">
        <property name="beverageShop" value="贡茶"/>
        <property name="source" ref="source"/>
    </bean>

 

  将饮品店设置为贡茶,这样就指定了贡茶为咱们提供服务,而订单则引用咱们以前的定义,而后使用下面代码就能获得一杯果汁了

public static void main(String[] args) {
       ApplicationContext ctx = new ClassPathXmlApplicationContext("spring/spring-cfg.xml");

       JuiceMaker2 juiceMaker2 = (JuiceMaker2) ctx.getBean("juiceMaker2");

        System.out.println(juiceMaker2.makeJuice());
        
    }

  这个过程当中,果汁是由贡茶所制造,咱们并不用关心制造的过程,咱们所须要关心的是如何对果汁进行描述,选择去哪一个店制造,就可以获得咱们想到的结果,程序也是同样。

相关文章
相关标签/搜索