耦合實現Spring IOC原理解析

2021-09-06 09:49:29 字數 2456 閱讀 1465

文章結束給大家來個程式設計師笑話:[m]

首先恭喜守巨集同學找到了自己心儀的工作,入職的事件終於塵埃落定,也算是乙個新的開始吧。和守巨集聊天的時候也說了很多有關工作的事件,暢想了以後美妙的未來,也想到了以後的各種困難。不說別的就是單單在北京住房這一項就夠任何乙個職場上的人忙上好幾年的。英國天氣無常,所以英國人寒暄的時候常常談論天氣;北京人居無定所,所以在北京下班的友人們大可以在寒暄的時候談論租房;)。

「哎,你在哪租的房子?」

「我在西二旗那邊,挺便宜的……」

「嗨,我之前在那邊住過……」

很多在北京工作的友人第一要斟酌的就是留宿的問題。沒辦法「衣食住行」裡面其他的都還好說,惟獨「住」這件事在帝還是乙個比擬特別的問題。也問過大多數在北京的友人,他們普遍的反應就是想省事就找中介,想省錢就自己找。不過現在好多了大家大部分都是在網上直接找到房東,然後商量**進而簽合同再然後就是入住了。不禁感嘆,資訊化發展了就是不一樣,真的能感覺到有一台能上網的終端(無論是計算機還是手機)就擁有了天下。

想必讀到這裡已經有些人開始罵街了,這哪是

spring ioc

道理剖析啊!這純屬是扯淡啊!!!上面鋪墊終了,上面進入正題。

生活中的spring ioc剖析

說到租房子這件事的時候猛然間就想到了spring,類似

58同城之類的發布資訊的**不就是

spring

裡面的容器麼。**上有很多別人提供的可以選擇的房子(

bean

),你所需要做的就是在沒有租房子之前想好自己的要求,比如得能洗澡,能做飯,冬暖夏涼,距離下班的地方近(這儼然就是乙個定義介面的程序),然後去網上檢索尋找適合自己的房子,前提是房東已經自動的將**資訊公布到網上(公布**資訊的程序就是將bean放入容器的程序,我們尋找房子的程序就類似於spring中注入的程序,至於是直接注入還是jndi注入,道理都是一樣的,詳細方式不一樣而已)。找到房子了也就是注入成功了,找不到那只能丟擲異常嘍。主旨就是:只要條件滿足,房子可以隨意換(只要實現了介面,詳細注入哪個實現類無關緊要)

基於有向圖的spring ioc剖析

從守巨集提到聊面試題當中還是學到一些比擬有意思的貨色,比如:

spring

的數學道理----有向圖。且不說這個論點對與不對,單就spring和有向圖這兩個與「資訊與計算迷信」專業息息相關的知識點來看,這個論題也是值得自己好好想一想的,上面就說說筆者對這句話的懂得。

每日一道理

航行者把樹比作指引方向的路燈,勞動者把樹比作遮風擋雨的雨傘,詩人把樹比作筆下的精靈,而我卻要把樹比作教師,它就是為我們遮風擋雨的傘,指明方向的路燈,開啟知識殿堂的密鑰匙。

為了方便敘說我們把spring管理的每個

bean

當作乙個節點(假設有n個bean,那麼就有n個節點)

,於是這些

bean加上相互之間表示呼叫關係的有向邊

就組成了乙個有向圖。毫無疑問,有向圖的邊越多那麼均勻來講每個頂點之間的耦合度就越大,最大的情況為完整有向圖,即任何兩個節點之間都有兩條有向邊,此時每個頂點的度為2(

n-1),也就是說每個

bean

與其他的

n-1個

bean

有耦合,而且還是雙向耦合。如下圖所示(這裡n=3)

盡人皆知,程式設計的程序中我們老是強調高內聚、低耦合,要想達到完整的無耦合(如下圖)是不可能的。所以最優情況是堅持一種松耦合的狀態,即在保證實現功能的前提下儘量減少類之間的耦合。我們可以利用介面達到這一目標,通過不同的實現類讓呼叫方對詳細實現不再關懷,從而達到松耦合的目標。

但是無論耦合如許「鬆散」詳細的實現類還是需要new出來的,於是就得斟酌這個new的程序應該放在**才是最適合的。如果在每個bean中都去new這個bean需要的其他bean,那麼耦合的程度又回到了第一幅圖的情況,那是沒有意義的。聰慧的讀者必定想到了如何解決這個問題:找乙個中間人,在中間人那裡實現new的程序,然後把new好的例項傳遞給需要這個例項的物件。這樣的話一切問題就迎刃而解了,終究的效果如圖所示

上圖也就是spring的數學描述,圖中很清晰的表明了在使用

spring

之後,恣意兩個節點(

bean

)之間的有向線段變成了

0(確切的說不完整是0,因為恣意兩個節點之間還是可以通過容器連線的)

,唯一和這些bean有關係的是容器(無論誰需要什麼貨色都去找容器,盡量防止兩個bean之間直接打交道)也正因為如此spring才達到了解耦的目標。

所以說,上面提到的「spring的數學道理是根據有向圖而來」這句話是有必定道理的。換個角度去看計算機,從生活,數學或者其他方面或許能把計算機看的更清晰。

文章結束給大家分享下程式設計師的一些笑話語錄: 程式設計師的願望

有一天乙個程式設計師見到了上帝.上帝: 小夥子,我可以滿足你乙個願望.程式設計師: 我希望中國國家隊能再次打進世界盃.

上帝: 這個啊!這個不好辦啊,你還說下乙個吧!

程式設計師: 那好!我的下乙個願望是每天都能休息6個小時以上.

上帝: 還是讓中國國家打進世界盃.

Spring IOC實現原理

ioc 控制反轉,通俗來說就是把物件的建立不是通過new的方式實現,而是交給spring配置檔案來建立類的物件。開發思想 高內聚,低耦合 ioc實現原理 需求 實現在userservlet中來得到userservice類的物件 第一步 建立xml配置檔案,配置要建立的物件類userservice 第...

SpringIOC實現原理

假設我們設計一輛汽車 先設計輪子,然後根據輪子大小設計底盤,接著根據底盤設計車身,最後根據車身設計好整個汽車。這裡就出現了乙個 依賴 關係 汽車依賴車身,車身依賴底盤,底盤依賴輪子。這樣的設計看起來沒問題,但是可維護性卻很低。假設設計完工之後,上司卻突然說根據市場需求的變動,要我們把車子的輪子設計都...

面試 spring ioc實現原理

首先載入乙個spring的容器beanfactory,beanfactory的構造方法會建立乙個實現了resource介面例項物件。resource物件通過setconfiguration 方法設定spring配置檔案位置。resource物件有三種實現 分別是fileresource,url re...