Spring 之IOC 詳解

目錄

 

第一節:spring ioc 簡介

第二節:spring ioc 實例講解第三節:裝配一個 bean

第四節:依賴注入

第五節:注入參數

第六節:Spring 自動裝配

開始學習:

(1)IOC(控制反轉)出現的原因(舉例子進行說明)       

(2)實現簡便版本的IOC(控制反轉)思想:多態,接口,繼承

(3)使用Spring管理IOC容器。

【舉例子版源代碼】

【簡便版本IOC 源代碼實現】


第一節:spring ioc 簡介

 

IOC(控制反轉:Inverse of Control ),又稱作 依賴注入,是一種重要的面向對象編程的法則來削減計算機程序的耦合問題,也是輕量級的 Spring 框架的核心。

第二節:spring ioc 實例講解第三節:裝配一個 bean

第四節:依賴注入

 

1,屬性注入;

2,構造函數注入;(通過類型;通過索引;聯合使用)

3,工廠方法注入;(非靜態工廠,靜態工廠)

4,泛型依賴注入;(Spring4 整合 Hibernate4 的時候順帶講)

 

第五節:注入參數

 

1,基本類型值; 2,注入 bean; 3,內部 bean; 4,null 值;

5,級聯屬性;

6,集合類型屬性;

第六節:Spring 自動裝配

通過配置 default-autowire 屬性,Spring IOC 容器可以自動爲程序注入 bean;默認是 no,不啓用自動裝配; default-autowire 的類型有 byName,byType,constructor;

byName:通過名稱進行自動匹配; byType:根據類型進行自動匹配;

constructor:和 byType 類似,只不過它是根據構造方法注入而言的,根據類型,自動注入; 建議:自動裝配機制慎用,它屏蔽了裝配細節,容易產生潛在的錯誤;

開始學習:

(1)IOC(控制反轉)出現的原因(舉例子進行說明)       

代碼copy請看我【舉例子版源代碼】

新建JavaWork,obZhangSan,Test  .java三個文件。

內部內容:

然後執行Test.java

 

 

重點!!!

分析上面的程序(javawork,zhangsan   .java)

我們會發現,測試這個工作,完全和那個人耦合在了一起。

假如,測試員換人了,換成了李四,我們發現,代碼統統都要換!!!

 

這就導致了,文件變化太大,破壞了完整性。

這個時候就有了IOC的設計思路。

控制反轉——把這個控制權轉交出來,某個人執行的測試工作轉交給主管。

 

(2)實現簡便版本的IOC(控制反轉)思想:多態,接口,繼承

代碼copy請看我【簡便版本IOC 源代碼實現】

首先你得通過一個接口(Interface)!!!

 

1.先定義一個接口方法,然後讓測試人員繼承它

2.新增了一個李四測試人員:

3.更改張三代碼,使其繼承測試接口

4.定義set方法(使之定義使用哪一個測試員),然後那個被定義好的測試員再在主管那裏去被調用,再去調用自身的test方法,其test的方法是我們從接口繼承而來,又重新實現的。

5.主管。

 

(3)使用Spring管理IOC容器。

8min,明天更新。

 

【舉例子版源代碼】

obZhangSan.java

package service;

public class obZhangSan {

   //張三測試員,具備做測試的動作。

   public void test(){

     System.out.println("張三-測試程序");

   }

}

 

Test.java

package test;

import service.JavaWork;

public class Test {

   //主管執行命令

   public static void main(String[] args) {

     JavaWork javawork=new JavaWork();

     javawork.doTest();

   }

}

 

JavaWork.java

package service;

public class JavaWork {

 

   //java測試工作

   public void doTest(){

     obZhangSan zhangsan=new obZhangSan();

     zhangsan.test();//張三來做測試操作。

   }

}

 

【簡便版本IOC 源代碼實現】

Tester.java

package service;

public interface Tester {//這就是一個接口方法,然後我們讓測試人員繼承它!

    public void test();//運用到的多態的思想

}

 

LiSi.java

package service;

public class LiSi implements Tester{

    public void test(){

       System.out.println("李四-測試程序");

    }

}

 

obZhangSan.java

package test;

import service.JavaWork;

import service.LiSi;

import service.obZhangSan;

public class Test {

 

    //主管執行命令

    public static void main(String[] args) {

       JavaWork javawork=new JavaWork();

       //javawork.setTester(new obZhangSan());

       //假如這裏需要換一個人了,代碼就完全不需要動。

       javawork.setTester(new LiSi());

      

       javawork.doTest();

    }

    //這樣子控制權就不是業務代碼來管理的,控制權就移交給了住慣了。

}

 

JavaWork.java

package service;

public class JavaWork {

    //定義一個測試員,具體誰來執行,從主管那邊設置。

    private Tester tester;//然後還需要一個set方法,快捷。

 

    public void setTester(Tester tester) {

       this.tester = tester;

    }

 

    //java測試工作

    public void doTest(){

    /*  obZhangSan zhangsan=new obZhangSan();

       zhangsan.test();//張三來做測試操作。*/   

       tester.test();//只需要某個人來做測試,而不用具體管做測試的是誰。

       }

}

 

Test.java

package test;

import service.JavaWork;

import service.LiSi;

import service.obZhangSan;

public class Test {

    //主管執行命令

    public static void main(String[] args) {

       JavaWork javawork=new JavaWork();

       //javawork.setTester(new obZhangSan());

       //假如這裏需要換一個人了,代碼就完全不需要動。

       javawork.setTester(new LiSi());

      

       javawork.doTest();

    }

    //這樣子控制權就不是業務代碼來管理的,控制權就移交給了住慣了。

}

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章