spring ioc 概述, 什么是依賴, 什么是面向接口編程

前言

Spring, 是一個輕量級的控制反轉(zhuǎn)(IOC)和面向切面(AOP)的容器框架

1.控制反轉(zhuǎn) IOC (inversion of controller)

IOC 是一種概念, 是吧我們程序中類與類之間的依賴關(guān)系交給容器處理, 一般有兩種方式

  • 依賴查找 DL (dependency lookup)

    程序提供查找方式, 交給容器去查找(回調(diào)函數(shù))

  • 依賴注入 DI (dependency injection)

    程序不提供查找方式, 提供合適的構(gòu)造方法或者setter方法,讓容器進行注入來解決依賴關(guān)系

spring 的控制反轉(zhuǎn)就是通過依賴注入來實現(xiàn)的

2.什么叫依賴

簡單的說,一個類實現(xiàn)某個功能需要依賴另一個類的幫助來實現(xiàn)

舉個簡單的例子

將類抽象為某一件事物,不同的類為不同的事物, 比如我們現(xiàn)在有一個 菜刀類 和一個 肉類, 如果我們現(xiàn)在想要菜能夠?qū)⑷馇谐善? 而后才能進行后臺的烹飪. 但是我們發(fā)現(xiàn)光憑 菜刀根本無法達到我們想要的效果, 我們想要叫肉變成肉片, 還必須借助一個菜板類,也只有借助菜板, 我們才能達到我們想要的想過, 而現(xiàn)在 菜刀菜板 也就存在依賴的關(guān)系

用程序舉一個例子

目標(biāo): 我們將模擬一個web登錄驗證功能

創(chuàng)建兩個文件 UserDao.java UserService.java

image

UserDao.java 作為數(shù)據(jù)持久層,連接數(shù)據(jù)庫, 提供鏈接數(shù)據(jù)庫, 判斷數(shù)據(jù)庫中用戶名和密碼是否正確

UserDao

public class UserDao{

    public boolean loginUser(String userName, String password) {
        System.out.println("這是通過jdbc進行登陸驗證的dao方法");
        return true;
    }

}

UserService.java 作為業(yè)務(wù)邏輯層, 調(diào)用數(shù)據(jù)持久層進行具體業(yè)務(wù)編寫

UserService

/**
 * 類描述:用于對關(guān)于用戶登陸,用戶增刪改查的服務(wù)類(service)
 * @author atom.hu
 *
 */
public class UserService {

    /**
     * 通過調(diào)用與數(shù)據(jù)庫交互的UserDao里面的loginUser方法,判斷是否驗證成功
     * @param userName
     * @param password
     * @return
     */
    public boolean loginUser(String userName,String password){
        boolean flag = false;
        //在userService中,,為了實現(xiàn)登陸的驗證,需要調(diào)用Dao的方法
        UserDao userDao = new UserDao();
        //IUserDao userDao = new UserDaoOther();
        flag = userDao.loginUser(userName, password);
        return flag;
    }
}

image

這里我們在UserService中創(chuàng)建main方法, 模擬進行調(diào)用

public static void main(String[] args) {
    UserService userService = new UserService();
    userService.loginUser("aaa", "bbb");
}

至此, 我們就模擬了一個簡單的登錄功能, 不難發(fā)現(xiàn)按照傳統(tǒng)的mvc 模式, 我們需要使用 dao , service, controller 三層結(jié)合起來使用, 每層負責(zé)自己的事,

image

在上的代碼中 UserService 中調(diào)用UserDao中的代碼, 它們便就存在依賴關(guān)系(圖中紅線框類)

3.面向接口編程

上面介紹了依賴的情況, 然后在實際開發(fā)中,都需要使用接口定義公共方法, 實現(xiàn)(implement)接口, 針對具體方法進行實現(xiàn)

image

在實際開發(fā)中,隨著項目的開展, 需求不時也會發(fā)生變化, 詳細到每一個功能點, 今天這個功能點需要實現(xiàn)A功能, 明天業(yè)務(wù)可能就會變成B功能, 再往后也有可能在回到A功能, 在針對著這樣多變的開發(fā)環(huán)境下, 針對接口編程就變得尤為重要

星期一

image

星期二, 老板心情不太好, 想要換個樣子

image
image

星期三

image

老板看了看覺得這個顏色好像有點不妥, 于是便又換了個樣子

image

此時的你

image

星期四

image

星期五 老板覺得, 看來看去, 還是覺得星期一的比較好

image

盡管你再不想改, 但是為了生存你還是要去做, 然后這樣的工作, 其實更多的是體力活, 對于技術(shù)而言增長不大

image

然后其實我們可以很好的避免這一點

我們需要定義一個公共的接口 IService, 接口中定義需要實現(xiàn)的功能列表, 然后我們只需要創(chuàng)建多個不同的實現(xiàn)類即可

image

如上圖所示, 再實現(xiàn)具體的功能時只需要通過接口new 對應(yīng)的對象即可

今天要實現(xiàn)A功能

image
IService ServiceA = new ServiceAImpl();

今天要實現(xiàn)B功能

image
IService ServiceB = new ServiceBImpl();

今天要實現(xiàn)C功能

image
IService ServiceB = new ServiceBImpl();

這樣而言, 無論需求如果改變都不再害怕

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凌蔬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子闯冷,更是在濱河造成了極大的恐慌砂心,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛇耀,死亡現(xiàn)場離奇詭異辩诞,居然都是意外死亡,警方通過查閱死者的電腦和手機纺涤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門译暂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人撩炊,你說我怎么就攤上這事外永。” “怎么了拧咳?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵伯顶,是天一觀的道長。 經(jīng)常有香客問我,道長祭衩,這世上最難降的妖魔是什么灶体? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮汪厨,結(jié)果婚禮上赃春,老公的妹妹穿的比我還像新娘。我一直安慰自己劫乱,他們只是感情好织中,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著衷戈,像睡著了一般狭吼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上殖妇,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天刁笙,我揣著相機與錄音,去河邊找鬼谦趣。 笑死疲吸,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的前鹅。 我是一名探鬼主播摘悴,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼舰绘!你這毒婦竟也來了蹂喻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤捂寿,失蹤者是張志新(化名)和其女友劉穎口四,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秦陋,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡蔓彩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了驳概。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粪小。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖抡句,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情杠愧,我是刑警寧澤待榔,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響锐锣,放射性物質(zhì)發(fā)生泄漏腌闯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一雕憔、第九天 我趴在偏房一處隱蔽的房頂上張望姿骏。 院中可真熱鬧,春花似錦斤彼、人聲如沸分瘦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嘲玫。三九已至,卻和暖如春并扇,著一層夾襖步出監(jiān)牢的瞬間去团,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工穷蛹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留土陪,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓肴熏,卻偏偏與公主長得像鬼雀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子扮超,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容