Spring的淺識(一)

     spring  相信大家都應該並不陌生,現在應用也相對來說比較廣泛了,有些大廠也對spring進行了改版,從而更加貼合自己的業務場景。剩下的就是攻城獅的CRUD了,可能有些人(比如我)僅僅只是停留在會用的地步,對spring的內部結構以及原理可能都不是很瞭解,遇到很多的問題異常有時候只會一臉矇蔽,不知所措,直接找度娘解決。很顯然這樣的方式其實是不對的,當然應付一些日常的開發,是沒有任何問題的。但是一旦出現一些奇怪的異常或者哪個地方配置有問題,就不知道問題的原因在哪?這樣往往會消耗很多的時間,有時候可能僅僅是因爲配置寫錯地方了或是遺漏了某個配置等等,如果對spring的工作原理不瞭解,那麼這樣其實是不科學的,無論對整個職業生涯的發展,還是其他都是不利的。我們只有瞭解了本質(俗話說:萬變不離其宗),那麼無論怎麼改變什麼問題,都知道爲什麼,該如何解決了。現在有很多的大廠都有自己的框架的,如不知道spring的底層工作原理,顯然是不行的,更不要說去調整框架了。作爲一個攻城獅僅僅會CRUD是不行的(知其然,也要知其所以然)

    好了,話不多說了,今天跟大夥來交流我對Spring的一點點認識吧!

    spring 能給我們帶來什麼? 爲什麼用spring,spring的優勢是什麼?  

    用過spring 的人應該都瞭解,很直觀的一個感受就是spring 能夠簡化開發。我記得我剛畢業那時候spring還沒有流行,用的是struts2框架,數據層還需要自己手寫dao層創建連接,前端還需要寫一些action等,總之一套流程下來花費的時間都在處理一些跟業務無關的事情,但是有必須得去做,很顯然這是不符合敏捷開發的規範(專注於業務的開發)。當spring出現了的時候很多的內容直接就簡化了,許多的內容進行配置化,使得整個項目的重心都只要專注於業務邏輯的開發了,感覺很大化的實現了高內聚低耦合例如(spring提供了IOC/DI,AOP, MVC 等)

其中Spring 的幾個最重要就是 :IOC(控制反轉) ,AOP(面向切面編程) ,DI (依賴注入)

三者的關係是:

Spring的架構圖組成(網上找的圖 ^ - ^ )

大致說一下最基本的7個模塊之間的關係(核心思想就是:控制反轉(IOC),依賴注入(DI),面向切面編程(AOP))

Spring - MVC的工作的基本流程是怎樣的? (個人認爲熟悉這個圖對理解spring還是很有幫助的,至少能spring知道入口)

 好了,接下來開始講解下spring的基本實現思路了(這一次僅僅是實現了一個簡單版的spring,其中的AOP ,MVC 都暫爲實現的,後期繼續)

1、配置階段 

      1.1、web.xml 配置 (入口方法)

      1.2、設置參數

      1.3、配置註解(Annotation)

2、初始化階段

      2.1、調用初始化方法Init() 加載配置文件(包/類路徑等)

      2.2、IOC容器初始化 (定義一個集合Map<String,Object>)

      2.3、掃描類 (scan.package= "com.springDemo.xxx")

      2.4 、將類實例化存入IOC容器中(通過反射的機制)

      2.5、執行DI操作,將未賦值的屬性賦值

      2.6、初始化HandlerMapping.根據URL 與Method的映射 (Map<String,Method>)

          根據IOC容器,循環遍歷將將帶有註解的類,以及方法Method存入map中

3、運行階段  (這一階段需要注意的就是:參數需要處理好,形參,實參的對應關係維護好)

     3.1、doPost()  /  doGet() 獲取請求對象(Request,Response)

     3.2、根據請求Request獲取請求的URL,去HandlerMapping中找到對應的Method方法

     3.3、通過獲取的Method 方法,利用反射機制執行該方法

     3.4、將執行Methodf方法返回的值寫入Response(response.getWrite.write()),返回到前端

---------------未完待續

 

                                                                                                                                                               注:感謝GP學院的Tom老師

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章