最近這幾天在看Spring的設計與源碼,又是把自己折磨的死去活來的。但是這麼經典的東西總是要好好體會吧,畢竟機會不多。
寫一點自己的思考和感觸吧:
問題1:IOC和DI到底有什麼區別?
之前一直認爲是同一個東西,就是從不同的角度來看的,所以有了不同的名稱(主要是從李剛的那本書上看到所理解的),但是最近去官網看文檔,發現了一句話不是這麼寫的,spring的文檔將這二者當做了不同的概念:
2.2.1 Core Container
The Core
Container consists of the spring-core
, spring-beans
, spring-context
, spring-context-support
,
and spring-expression
(Spring
Expression Language) modules.
The spring-core
and spring-beans
modules provide
the fundamental parts of the framework, including the IoC and Dependency Injection features.
主要是因爲看到了其中的一個詞:and,他把IOC和DI用and連起來了,當時還不理解,問了同事,同事說是語法的問題,就是一個東西,但是由於要看源碼,所以看了各種相關資料書籍和視頻,在視頻中又發現了一個新的講解:IOC是把bean創建出來,DI是注入依賴,IOC是前提,爲DI提供對象,DI是工具,將對象關聯起來,那麼這麼說來我倒是能理解了。
你可以將其等同起來看待,也可以將其分開理解。
問題2:BeanFactory的實現類都是在getbean時才創建對象的,而ApplicationContext一開始就創建了對象,我也知道有懶加載的配置,我也懶得理會,我的問題是:開始這麼設計beanfactory時是爲了考慮性能問題(2001年時內存才幾十M,硬盤也才一二十G),而後來硬件發展了(現在的內存動不動就8G,16G,32,64,硬盤那是更大以T算了),不再需要過多的考慮硬件性能了,那麼我們編程時還需要過多的考慮性能問題嗎?
比如說我在方法中創建的對象過多了,創建了無用的局部變量(無意識創建的),方法調用的層次過多……等等這些還需要仔細考慮嗎?我想吧,應該不太用在意了,除非是在及其苛刻的條件下才需要考慮,而一般我們接觸的都是很普通的程序。但是由於個人習慣問題,我還是會考慮的,個人追求完美而已(潔癖問題)。那麼那些數據庫的字段類型還有必要區分int short long 之類的了嗎,因爲到了程序中都是對應的一種類型,而硬盤又不需要節省這麼點空間,統一類型就挺好的,之前還一直追求完美的,但是現在覺得數據庫的設計也不必那麼苛刻了。其實很多公司也都已經這麼做了,我以後也應該這麼做。
看代碼還是隻剛開頭,等邊看邊寫吧。