程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Spring學習(二) IoC詳解

Spring學習(二) IoC詳解

編輯:關於JAVA

上次的博客深入淺出Spring(一)Spring概述中,我給大家簡單介紹了一下Spring相關概念。重點是這麼一句:Spring是為了解決企業應用開發的復雜性而創建的一個輕量級的控制反轉(IoC)和面向切面(AOP)的容器框架。在這句話中重點有兩個,一個是IoC,另一個是AOP。今天我們講第一個IoC。

IoC概念

控制反轉(Inversion of Control)是一個重要的面向對象編程的法則來削減計算機程序的耦合問題。 它還有一個名字叫做依賴注入(Dependency Injection)。IoC不是什麼技術,它是一種設計模式。

實例演示

為了更好的說明IoC,我為大家舉一個簡單的例子,如有這樣一個描述:某公司新成立了一個項目組,項目組有若干成員和一個項目組長,項目組成立後第一次開會上,作為項目組長的小李按照慣例首先做了簡短的自我介紹。

根據上述的描述,如果我們寫出如下代碼和類圖:

public class Li {    
        public void introduce() {
            System.out.println("大家好,我是小李");
        }
    }
    public class Team {
        public void firstMeeting() {
            Li li = new Li();
            li.introduce();
        }
    }
具體類圖如下:

上述的代碼,應該說基本完成了相關的需求,但是仔細考慮之後就會發現,上述的代碼是根據具體的場景描述進行的,並沒有進行抽象,這樣就導致我們不能靈活的安排項目組長去做開場,即根據現在的代碼,開場自我介紹被綁定給了小李而不能安排給其他人。為了解決上述的問題,我們引入首先引入Leader接口,相關代碼和類圖如下:

public interface Leader {
        public void introduce();
    }
    
    public class Li implements Leader {
        @Override
        public void introduce() {
            System.out.println("大家好,我是小李");
        }
    }
    
    public class Team {
        public void firstMeeting() {
            Leader li = new Li();
            li.introduce();
        }
    }

具體類圖如下:

URL:http://www.bianceng.cn/Programming/Java/201410/45836.htm

雖然上述的代碼可以讓我們安排給其他成員開場,但是我們可以看出Team類同時依賴Leader接口和Li類,並沒有達到我們所期望的Team僅僅依賴於Leader接口的目的,如何解決這個問題呢?當然是引入Boss,由Boss決定具體由誰擔任項目組長。具體類圖和代碼如下:

public interface Leader {
        public void introduce();
    }
    
    public class Li implements Leader {
        @Override
        public void introduce() {
            System.out.println("大家好,我是小李");
        }
    }
        
    public class Team {
        public void firstMetting(Leader leader){
            leader.introduce();
        }
    }
        
    public class Boss {
        public void direct(){
            Leader leader = new Li();
            Team team = new Team();
            team.firstMetting(leader);
        }
    }

具體類圖如下:

通過以上代碼和圖示,我們可以看出,通過引入老板類,我們將項目小組和具體由誰擔任項目組長進行解耦。

對應上述例子,我們再來講解一下IoC,IoC從字面上看分為控制和反轉,控制在上面的實例中就是具體由誰擔任項目組長,而反轉就是將決定誰擔任項目組長轉移到Boss類中。通俗理解就是將接口的具體實現類(Li)的控制權從調用類(Team)中分離轉交給第三方(Boss)決定。

到此為止,IoC的概念我們就已經講完了,具體Spring中如何實現呢?這等到我們之後的針對Spring實例再給大家詳細解釋。本次大家只要知道IoC相關概念和實現思路即可。

出處:http://www.cnblogs.com/zs234/

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved