對spring框架的理解


spring框架的兩大核心理念就是IOC和AOP,在面試的時候經常會被問到你對spring的理解。下面大致的說一下我對spring的理解。

一、IoC

1.1、什么是IoC

  眾所周知,IoC就是控制反轉,那么什么是控制反轉?

  首先大家要考慮幾個問題。

  • 誰控制?控制了什么?

    傳統的java程序設計,當A需要B的時候,我們會在A中new一個B,這就是程序主動創建以來對象;而spring專門提供了IOC容器來創建這些對象。

    誰控制?IoC 容器控制;控制了什么?就是IOC容器控制着對象或者說是外部的資源。

  • 反轉了什么?哪里反轉了?

    有反轉就說明有正轉,傳統應用程序是由我們自己在對象中主動控制去直接獲取依賴對象,也就是正轉;而反轉則是由容器來幫忙創建及注入依賴對象。

    反轉了什么?因為由容器幫我們查找及注入依賴對象,對象只是被動的接受依賴對象,所以是反轉;哪里反轉了?依賴對象的獲取被反轉了。

1.2、IoC是做什么的

  傳統應用程序都是由我們在類內部主動創建依賴對象,從而導致類與類之間高耦合,難於測試;有了IoC容器后,把創建和查找依賴對象的控制權交給了容器,由容器進行注入組合對象,所以對象與對象之間是松散耦合,這樣也方便測試,利於功能復用,更重要的是使得程序的整個體系結構變得非常靈活。

  其實IoC對編程帶來的最大改變不是從代碼上,而是從思想上,發生了“主從換位”的變化。應用程序原本是老大,要獲取什么資源都是主動出擊,但是在IoC/DI思想中,應用程序就變成被動的了,被動的等待IoC容器來創建並注入它所需要的資源了。

1.3、IoC(控制反轉)和DI(依賴注入)

  DI—Dependency Injection,即“依賴注入”組件之間依賴關系由容器在運行期決定,形象的說,即由容器動態的將某個依賴關系注入到組件之中依賴注入的目的並非為軟件系統帶來更多功能,而是為了提升組件重用的頻率,並為系統搭建一個靈活、可擴展的平台。通過依賴注入機制,我們只需要通過簡單的配置,而無需任何代碼就可指定目標需要的資源,完成自身的業務邏輯,而不需要關心具體的資源來自何處,由誰實現。

  理解DI的關鍵是:“誰依賴誰,為什么需要依賴,誰注入誰,注入了什么”,那我們來深入分析一下:

  ●誰依賴於誰:當然是應用程序依賴於IoC容器

  ●為什么需要依賴:應用程序需要IoC容器來提供對象需要的外部資源

  ●誰注入誰:很明顯是IoC容器注入應用程序某個對象,應用程序依賴的對象

  ●注入了什么:就是注入某個對象所需要的外部資源(包括對象、資源、常量數據)

  IoC和DI由什么關系呢?其實它們是同一個概念的不同角度描述,由於控制反轉概念比較含糊(可能只是理解為容器控制對象這一個層面,很難讓人想到誰來維護對象關系),所以2004年大師級人物Martin Fowler又給出了一個新的名字:“依賴注入”,相對IoC 而言,依賴注入”明確描述了“被注入對象依賴IoC容器配置依賴對象”。

  依賴注入的三種方式:setter、構造方法、注解(@Autowired,@Resource)。

1.4、總結

  在傳統的java程序設計中,A需要B,我們就要在A中new一個B,這樣大大提高了代碼的耦合度,而spring會把資源存儲到IoC容器中,當A依賴B的時候,IoC就會把B注入到A中。這樣就完成了資源的控制的反轉。

  所以控制反轉IoC(Inversion of Control)是說創建對象的控制權進行轉移,以前創建對象的主動權和創建時機是由自己把控的,而現在這種權力轉移到第三方,比如轉移交給了IoC容器,它就是一個專門用來創建對象的工廠,你要什么對象,它就給你什么對象,有了 IoC容器,依賴關系就變了,原先的依賴關系就沒了,它們都依賴IoC容器了,通過IoC容器來建立它們之間的關系。

 

 二、AOP

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM