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());
        
    }

  這個過程當中,果汁是由貢茶所製造,咱們並不用關心製造的過程,咱們所須要關心的是如何對果汁進行描述,選擇去哪一個店製造,就可以獲得咱們想到的結果,程序也是同樣。

相關文章
相關標籤/搜索