10年架構師告訴你,他眼中的Spring容器是什麼樣子的

来源:https://www.cnblogs.com/lixinjie/archive/2019/01/07/how-do-you-think-spring-is-a-container.html
-Advertisement-
Play Games

相關文章 如何慢慢地快速成長起來? 成長的故事之Spring Core系列 你是如何看待Spring容器的,是這樣子嗎? Spring的啟動過程,你有認真思考過嗎?(待寫) 面向切麵編程,你指的是Spring AOP嗎?(待寫) Spring的聲明式事務,這次你徹底明白了吧?(待寫) §如何提問,如 ...


相關文章

如何慢慢地快速成長起來?

成長的故事之Spring Core系列

你是如何看待Spring容器的,是這樣子嗎?
Spring的啟動過程,你有認真思考過嗎?(
待寫
面向切麵編程,你指的是Spring AOP嗎?(
待寫
Spring的聲明式事務,這次你徹底明白了吧?(
待寫


§如何提問,如何回答?

記得大學時,思想道德修養課的老師說過,現在的大學生都不太會
表達自己的觀點。她舉了這麼個例子,如果你在食堂,隨機採訪幾個學生,就問:“你覺得食堂的飯菜怎麼樣啊?

你得到最多的答案大概是像這樣的,“
不錯,挺好吃的”;“不行,太難吃了”;“湊合,感覺還可以吧”。

原因有兩方面,一是學生
不知道該如何對一個事物發表自己的觀點,也就是自我表達能力有點差。二是提問的問題本身存在問題,太寬泛了,學生不知道該怎麼接。諸如此類的“你是如何看待XXX的?”這樣的問題,感覺是最難回答的。

但我要說的是,
如果你能把這類問題回答的很好,那你真的已經相當厲害了

§從面試別人說起

說起來我也面試過幾十個人了,不過說實話,我並沒有一個很好的套路或方法去面試別人。我一般不會特別在意應聘者截至到現在
擁有多少知識,或會多少技術。註意我說的是一般情況下不會。

原因有二,一來我們不是
造航母,招的就是擰螺絲的。二來我更在意一個人對他已有知識,或已經會用的技術的看法

因為一個
問題的結果無非就是一些答案。但是一個看法的結果卻是一些觀點。一個人能夠當眾發表一些很有看法的觀點,說明的他的業務/技術素質心理素質都很不錯。

所以對於應聘者,我都會問,
你如何看待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僅僅是個容器嗎?請持續關註後續文章!



經典文章推薦

小學生都能看懂的表達式計算(圖解)

五分鐘輕鬆瞭解Hbase列式存儲

List家族遺產繼承PK賽(一)

List家族遺產繼承PK賽(二)

Map家族前來踢館(一)

Map家族前來踢館(二)




(完)


編程新說


用獨特的視角說技術



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 預備知識: 必須:Git,GitHub,Jekyll,Markdown,YAML 可選:HTML,JavaScript,CSS,XML 工具: 可選:VSCode+Markdown Preview Github Styling,GitHub Desktop 操作: 註冊一個GitHub的賬號,可以使... ...
  • <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv ...
  • 全選 ...
  • 在狀態模式中,類的行為時基於它的狀態改變而改變。 介紹 狀態模式屬於行為型模式,通過運行對象在內部狀態發生改變時改變它的行為,主要解決的問題是對象的行為嚴重依賴於它的狀態。 類圖描述 代碼實現 1、定義狀態上下文 2、定義行為介面 3、定義行為 4、上層調用 總結 狀態模式封裝了轉換規則,將每種狀態 ...
  • 空對象模式取代簡單的 NULL 值判斷,將空值檢查作為一種不做任何事情的行為。 介紹 在空對象模式中,我們創建一個指定各種要執行的操作的抽象類和擴展該類的實體類,還創建一個未對該類做任何實現的空對象類,該空對象類將無縫地使用在需要檢查空值的地方。 類圖描述 代碼實現 1、定義抽象類 2、定義實體類 ...
  • 適配器模式是作為兩個不相容的介面之間的橋梁。這種類型的設計模糊屬於結構性模式,它結合了兩個獨立介面的功能 ...
  • Django是Python中一個非常牛逼的web框架,他幫我們做了很多事,裡邊也提前封裝了很多牛逼的功能,用起來簡直不要太爽,在寫網站的過程中,增刪改查這幾個基本的功能我們是經常會用到,Django把這系列複雜的邏輯性東西都封裝成了方法,供我們直接使用,在使用過程中的體會是簡單到令人髮指,一個簡單的 ...
  • 前言 開心一刻 快過年了,大街上,爺爺在給孫子示範摔炮怎麼放,嘴裡還不停念叨:要像這樣,用勁甩才能響。示範了一個,兩個,三個... 孫子終於忍不住了,抱著爺爺的腿哭起來:爺呀,你給我剩個吧! 新的一年祝大家:健健康康,快快樂樂! github:https://github.com/youzhibin ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...