1. 程式人生 > >spring的兩大核心技術之一:控制反轉

spring的兩大核心技術之一:控制反轉

Spring框架的核心就是控制反轉(Inversion of Control)和依賴注入(Dependency Injection),通過這兩方面來實現鬆耦合。
    使用IoC,物件是被動的接受依賴類,而不是自己主動的去找。容器在例項化的時候主動將它的依賴類注入給它。可以這樣理解:控制反轉將類的主動權轉移到介面上,依賴注入通過xml配置檔案在類例項化時將其依賴類注入。通過下面的例項來逐步的理解:


    首先假設有一個需求,類Business需要呼叫類Dependency的方法f(),按照日常的做法,得到下面的程式碼:
//**類Dependency**
public class Dependency {
    public void f() {};
}
//**類Business**
public  class Business {
    Dependency d;
    public Business() {
    d = new Dependency();
    }
    public void doSth() {
        d.f();
    }
}


    對上述實現做出如下修改:
    首先,將Business裡的Dependency例項的獲得該為setter方式,其次,將Dependency類改為某個介面的實現。故可以得到下面新的程式碼:
//**介面IDependency**
public interface IDependency {
    void f();
}
//**類Dependency**
public class Dependency {
    public void f() {};
}
//**類Business**
public  class Business {
    IDependency d;
    public Business() {}
    public void doSth() {
     d.f();
    }
    public void setDependency(IDependency d) {
        this.d = d;
    }
}


    在新的程式碼中,首先Business的變數d可以接收任何IDependency的例項,另外,Dependency的例項不是通過Business來獲得,而是通過setter(也可以用構造器)來由外部傳給它。這似乎跟我們往常的程式碼沒什麼不同,但這已經是一個良好的設計。關鍵就是Dependency的例項如何從外部注入給Business呢?
這就要通過xml來實現了。
    建立一個SpringFirst.xml,進行簡單的配置:
<beans>
    <bean id = "dependency" class = "aopfirst.business.Dependency" />
    <bean
        id = "business"
        class = "aopfirst.business.Business"
    >
        <property name = "dependency">
            <ref bean = "dependency" />
        </property>
    </bean>
</beans>
    這個配置檔案裡將Dependency類和Business類加入,並將Dependency作為Business的一個引數。


    單有了這個xml檔案還不夠,還需要一個測試類來載入該xml檔案,spring提供了現成的API,在載入上面的xml的時候,就進行了如下工作:例項化Dependency類,例項化Business類,並將Dependency的例項作為引數賦給了Business例項的
setDependency()方法。下面是該測試程式:


public class StartServer {
    public static void main(String [] args) {
     ClassPathResource cr = new ClassPathResource("SpringFirst.xml");
     BeanFactory factory = new XmlBeanFactory(cr);
     Business b = (Business)factory.getBean("business");
     b.doSth();
    }
}


    上面的程式載入了xml以後,獲得id為"business"的bean,即Business類的例項,並呼叫了其doSth()方法。由此可見,Business的依賴類Dependency是通過xml來注入的,而且Business是通過介面IDependency來接收Dependency例項。因此,當我們又有新的IDependency的實現時,只需要修改xml檔案即可,測試程式只需要根據xml裡的id值來獲得需要的引數。

    總結上面的例子,對控制反轉

依賴注入已經能理解了。依賴類(Dependency)是通過外部(xml)來注入的,而不是由使用它的類(Business)來自己製造,這就是依賴的注入。另一方面,Business對類Dependency的依賴轉移到對介面IDependency的依賴,控制權由類轉移到了介面,即由"實現"轉移到"抽象"中。這就是控制反轉。

-------------------------------------------------------------------

-------------------------------------------------------------------

說白了控制反轉就是:

1就是以前呼叫某類的方法,是直接呼叫某類的方法,該方法是就是具體實現。而引入控制反轉,呼叫的介面類的介面方法,而介面方法並沒有具體實現該方法,要以來控制反轉指定該方法的具體實現。

2可以簡單理解為,1以前都是new某類,現在是程式給你new了2你只需要呼叫介面的方法即可,而控制反轉給你指到具體實現的類。

---------我的理解:

1依賴注入:成員變數初始化,由xml外部注入,而不是自己new。

2控制反轉:成員變數是介面物件,而不是普通的類物件(包含完整函式實現)。

所以,簡單記憶:依賴注入=xml,控制反轉=介面。

相關推薦

spring核心技術之一控制反轉

Spring框架的核心就是控制反轉(Inversion of Control)和依賴注入(Dependency Injection),通過這兩方面來實現鬆耦合。    使用IoC,物件是被動的接受依賴類,而不是自己主動的去找。容器在例項化的時候主動將它的依賴類注入給它。可以這

Spring核心-AOP和IoC

一.IoC   IoC   (Inversion of Control)          中文譯為控制反轉,又稱為“依賴注入”(DI =Dependence Injection)   IOC的基本概念是:不建立物件,但是描述建立它們的方式。在程式碼中不直接與物件

Spring 核心技術

1)        Spring 簡介 Spring 是一個全方位的應用程式開發框架( framework ),是潛在的一站式解決方案,它定位於與典型應用相關的大部分基礎結構。自從 2003 年釋出以來, Spring Framework 已經對 Java 企業應用體系

動態代理,Spring核心知識BeanFactory、AOP框架!

實現功能的封裝與配置: 工廠類BeanFactory負責建立目標類或者代理類的例項物件,並通過配置檔案實現切換,getBean方法根據引數字串返回一個相對應的例項物件,如果引數字串在配置檔案對應的類名不是ProxyFactoryBean,則直接返回該類的例項物件,返回該物件的

Sping框架的核心技術知識

Spring框架的兩大核心技術分別為:          一.IOC(Inversion of Control, 控制反轉)把建立物件的操作交給框架,亦被稱為 DI(Dependency Injection, 依賴注入)          二.AOP(面向切面程式設計)

CDN的核心技術之一負載均衡

CDN是近年來從美國首先興起並迅速發展起來的一種解決網站加速的有效手段。隨著國內寬頻網路使用者的增多和網路視訊業務的增長,短短几年內,國內CDN技術發展迅速,很多網站都開始啟用CDN服務來改善網站速度,提高服務質量,為網路使用者帶去了更好的訪問體驗。 CDN主要是通過在現

spring中的核心模組IOC和AOP

Spring就像一個管家,幫你管理事務。傳統的應用,應用層(Struts2)和事務層(Service)聯絡很緊密,通過Spring管理之間的關係,減低其耦合性。Spring的出現就是為了解決現有問題,使開發更快捷,更健壯。另外,一定要好好學習Spring,他可是有一統天下的野心。有針對Stru

spring核心思想------loc

loc(控制反轉)是spring的兩大核心思想之一,他是將java bean 的建立以及生命週期的實現和控制交由容器來管理。這樣做的缺點是耦合性較高,不利於程式的擴充套件。 使用spring的步驟 1)新建maven專案(書寫三要素) 2)加入spring的依賴 <depend

卡耐基梅隆大學專家談核心技術市場化「AI 周邊相關機遇最

https://blog.csdn.net/cf2SudS8x8F0v/article/details/84669822   來源:ZDnet、機器之能 編譯 | 張璽   摘要:技術市場化之難在哪?創業家最常犯什麼錯誤?每位立志創業的朋友都應該研究

Java知識點集合05--- Spring核心&Spring事務的傳播特性&隔離級別&ORM&ibatis和Hibernate&Hibernate對映物件狀態

Spring的兩大核心 spring是J2EE應用程式框架,是輕量級的IOC和AOP容器框架(相對於EJB ),針對javabean生命週期進行管理的親兩級容器。 IOC(控制反轉Invesion of control)或DI(依賴注入 Dependency

spring核心,

IOC和AOP,也就是依賴注入和麵向切面程式設計 先來說說IOC,在我們任何一個有實際意義的專案開發中,都會有很多的類,來描述他們特有的功能,並且通過類與類之間的協調工作,來完成特定的業務邏輯,這個時候每個類都需要負責管理與自己有互動的類的引用和依賴,程式碼會變得異常的難以

奇虎360歸程起底終極獵手露面 平行入股核心平臺

資料圖 上證報記者最新獲悉,奇虎360私有化的兩大平臺(SPV)——天津奇信志成科技有限公司、天津奇信通達科技有限公司已於日前完成增資手續,估值分別達40億美元和117億美元。除奇虎360董事長周鴻禕、總裁齊向東外,共有兩大類39家機構入局,一類是“信字輩”的三家奇

Spring系列之——Spring事務以及核心IOC和AOP

配置 一起 ans 事務 控制反轉 系列 成功 ger manager 1 Spring事務 1.1 Spring事務是什麽(百度)   事務是對一系列的數據庫操作(比如插入多條數據)進行統一的提交或是回滾操作,如果插入成功,那麽一起成功,如果中間一條出現異常,那麽回滾

Spring與其核心

控制 程序 出現 控制反轉 原理 面向切面編程 容器 框架 面向 Spring是j2EE應用程序框架,是輕量級的IOC和AoP的容器框架 IOC:控制反轉 其中重要的是DI   DI:註入 原來spring是 發現service需要Dao,就需要創建Dao 現在se

JAVA記錄-Spring特性

抽象類 我們 pro 系統 都是 服務類 資源 關系 註入組 1.IOC控制反轉 Ioc—Inversion of Control,即“控制反轉”,不是什麽技術,而是一種設計思想。在Java開發中,Ioc意味著將你設計好的對象交給容器控制,而不是傳統的在你的對象

核心技術解析移動端車牌識別系統方案

ocr文字識別 攝像頭 inf 人員 c代碼 cnblogs 單機 研發 安裝 國內目前OCR車牌識別技術,主要細分為:1.識別車牌號碼、2.車牌顏色、3.車牌類型等車牌特征信息;算法采用清華TH-OCR技術,不僅融合了車牌定位、車牌字符切分、車牌字符識別等算法,而且系統具

zookeeper核心與API

zookeeper的兩大核心 檔案系統 儲存 進入zk的客戶端: zkCli.sh [zk: localhost:2181(CONNECTED) 0] 1)zk的檔案系統 和lin

LTE關鍵技術之一OFDMA(OFDM基本原理及簡單例項應用)

       OFDM即正交頻分複用(Orthogonal Frequency Division Multiplexing),是多載波調製的一種,通俗來說就是通過多條互相沒有關係的通道傳輸不同的資訊。OFDM現在主要用於4G通訊上

SpringMVC的核心技術之一--攔截器

專案中的應用:比如使用者的登入攔截----------我們可以在prehandle方法中寫我們的業務邏輯程式碼來判斷請求是不是正確的,使用者只有登入過我們的系統之後才可以訪問我們的應用,可以判斷在session會話中有沒有登入資訊,如果有,讓prehandle方法返回true,如果沒有就在會

區塊鏈核心技術之一(共識演算法)

開篇導言 作為一名IT技術工作者以及區塊鏈相關從業者,談到區塊鏈技術,不自覺的會想到密碼學、P2P協議、分散式儲存以及共識機制。鑑於前三者無論在學術上和工程上都是比較成熟的技術,因此理解區塊鏈的關鍵就是理解共識機制。從比特幣的POW開始,到以太坊的Ethash,再到EOS的dpos機制,然後是基於VRF抽籤設