10年架構師告訴你,他眼中的Spring容器是什麼樣子的
阿新 • • 發佈:2019-01-07
相關文章
如何慢慢地快速成長起來?
成長的故事之Spring Core系列
你是如何看待Spring容器的,是這樣子嗎?
Spring的啟動過程,你有認真思考過嗎?(待寫)
面向切面程式設計,你指的是Spring AOP嗎?(待寫)
Spring的宣告式事務,這次你徹底明白了吧?(待寫)
§如何提問,如何回答?
記得大學時,思想道德修養課的老師說過,現在的大學生都不太會表達自己的觀點。她舉了這麼個例子,如果你在食堂,隨機採訪幾個學生,就問:“你覺得食堂的飯菜怎麼樣啊?”
你得到最多的答案大概是像這樣的,“不錯,挺好吃的”;“不行,太難吃了”;“湊合,感覺還可以吧”。
原因有兩方面,一是學生
但我要說的是,如果你能把這類問題回答的很好,那你真的已經相當厲害了。
§從面試別人說起
說起來我也面試過幾十個人了,不過說實話,我並沒有一個很好的套路或方法去面試別人。我一般不會特別在意應聘者截至到現在擁有多少知識,或會多少技術。注意我說的是一般情況下不會。
原因有二,一來我們不是造航母,招的就是擰螺絲的。二來我更在意一個人對他已有知識,或已經會用的技術的看法。
因為一個問題的結果無非就是一些答案
所以對於應聘者,我都會問,你如何看待Spring?大都回答Spring是一個IoC容器,然後就沒有了。其實我真正想知道的是你眼中的Spring是什麼樣子的。
然後我繼續問,什麼是IoC?大都答道控制反轉或依賴注入。我再問,你如何理解控制反轉呢?幾乎沒有人能很好的回答。
既然是一個IoC容器,那你怎麼理解“容器”二字?幾乎也沒有人能回答的很好。
§C語言中的全域性變數
計算機專業一般都會學C語言,倒不是為了做專案,只是作為入門語言。C語言是面向過程的,沒有類、欄位等這些概念,只有
剛開始接觸程式和語言時,大都水平不高。用的最多的就是全域性變數,而且覺得特別好用。
原因有二,一是隻要在一個全域性位置定義好,後面程式中的任何地方都能夠訪問到它。二是因為全域性可訪問,所以不用去考慮或規劃,如何定義變數,怎麼在函式間傳遞或返回。關鍵作為初學者,不一定能夠做好這“簡單”的事情。
全域性變數非常簡單好用,和goto語句一樣。但逐漸都不推薦再使用或被淘汰了,因為它們太靈活了,不太好控制,特別是後期程式碼量越來越多的時候。
如果發明一種東西,像全域性變數一樣簡單好用(繼承優點),但同時又能夠很好地控制住(改進缺點),它能不火起來嗎?很顯然,Spring就具有這種特性(雖然現在的Spring已經足夠複雜了)。
§Spring很好用,真的
BAT之所以牛逼,就是因為它們都在各自的領域,徹底改變了人們的方式。Spring也徹底改變了人們的程式設計方式。
類似的還有Struts/SpringMVC徹底改變了開發web應用的方式,Hibernate/Mybatis徹底改變了訪問資料庫相關程式碼的方式。
Spring的全域性性
人類擡頭,看到的是天。程式碼擡頭,看到的是Spring。在任何地方,程式碼都可以和Spring互動。可以這麼說,程式碼幾乎是在Spring的管控下執行的(雖然這樣講不是很精確)。
Spring的解耦性
這裡指的更多是開發方式上的解耦性。例如,從類A把B傳給類C,原來的做法是直接傳,這樣A和C就耦合了,其實它們本沒有關係。
現在只需在類A裡把B放入Spring中就完事了。然後在類C裡再從Spring中取出B就可以了。A和C就解耦了,因為Spring充當了中間人。
Spring的易用性
Spring就像你的祕書/管家,需要什麼服務,告訴它,它給你提供。需要發號施令,告訴它,它幫你執行。
就把Spring想象成你頭頂的容器,需要從裡取東西,伸開胳膊拽下來的就行了。需要往裡存東西,胳膊用力推上去就行了。整個過程你甚至都不用擡頭。
PS:Spring僅僅是個容器嗎?請持續關注後續文章!
經典文章推薦
(完)
程式設計新說
用獨特的視角說技術