Spring IoC 原理猜想

來源:互聯網
上載者:User

負責的說,我沒有用過Spring,更沒有看過它的源碼,只是和餅子堂的朋友聊了聊,但是我覺得我已經明白Spring的IoC了(早年也試圖看過幾本Spring相關的書,往往是淺嘗輒止了,多虧這幾次聊天了)。不過這樣講,很讓人惱火,不過我覺得我確實知道Spring的內部是如何?的了,今天先把它們寫出來(我以為我知道了,但是題目還是 猜想)。

另外,前幾天,我在JavaEye上,見到了一篇關於Spring的文章,大致也是講原理的,因為那個時候我就打算寫這篇blog了,於是我沒有敢看,因為我怕,怕文章顛覆了我的想法,真是掩耳盜鈴啊。等我寫完了,我會仔細閱讀以下的。

Spring

Spring的IoC,(我以為)其最大的作用就是解耦,在實際的應用中,使得各個組件之間保持鬆散。當然了,我顯然不講使用,而是講原理。

首先,先看下面的代碼:

IA是一個介面,A實現了該介面,當我們要使用A(作為IA實現)的功能的時候,最初的Java代碼要這樣寫。

IA a = new A();a.invokeMethod();

這樣,無疑使得調用方依賴於實現方了。

而我們知道,依賴往往是不好的。如果調用方不知道實現class是A,那麼就更好了。那麼可以大致這樣寫。

IA a = (IA) factory.getBean("A");

這裡,我還是把一些看起來是Spring的代碼列出來吧,畢竟我的目的是讓人清楚Spring做了什麼,已經它是怎麼做到的。

現在,我們發現,調用方不依賴於A了,而耦合的僅僅是一個字串“A”了。那麼,這就非常好了。我實在想不出來還有比這更小的耦合方式,除非是習慣勝於配置學說至上者。

那麼這背後都需要做點什麼呢,其實很簡單,Spring所以號稱是容器(當然了,不是Servlet容器),是因為它確實有容量~,它通過尋找對象的配置項,把書寫在Xml設定檔中的class,通過反射的方法建立出來,並按照<string, object>的方式,用一個HashMap進行索引值對儲存起來。實際上,它儲存的可能不是需要的對象,而是這個對象的Factory,因為這樣有利於Lazy-Loading吧?

其實,IoC部分,就這麼簡單:調用方依賴Spring,而不是直接依賴於實現方;而Spring去通過設定檔,完成wiring,實現調用和實現直接的間接聯絡。

想到Ferry了,其實也是使用了這種手法,只是Ferry關注更多的是對象之間解耦和通訊,並且強調一對多的聯絡。

好了,讓我去搜搜那篇文章吧。建議各位看這篇,而不是我這篇(顯然我的篇幅很短)。

http://www.javaeye.com/topic/493965

可能是這篇。

本文出處:http://www.cnblogs.com/healerkx/articles/1597614.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.