對Spring框架的理解

談起Spring,很直接的會想到它是容器,其核心是IoC和AOP。那麼應該怎樣準確的理解IoC和AOP。

1.  首先,籠統的說一下Spring框架。

       Spring實現了工廠模式的工廠類,其類名爲BeanFactory(接口)。在程序中通常用它的子類ApplicationContext。

       Spring相當於一個大的工廠類,在其配置文件中通過<bean>標籤配置用於創建實例對象的類名和實例對象的屬性。

       工廠模式是一種產生對象型的設計模式,有了工廠模式後,當需要某個類的對象的時候,就不再需要通過new的方式進行創建,而是調用工廠中的方法即可。也就是不需要關心對象的創建過程;甚至有時候需要的對象只要是某種大分類的類型就可以了,而不必是某個指定的類型。不會過度依賴某個類,這些類都是易於被替換的,以提高整個項目的可維護性。

2. 其次,說一下Spring框架的核心:IoC和AOP。

       (1) Spring提供了對IoC( 控制反轉 )的良好支持,它是一種編程思想。

        IoC是一種思想,一個重要的面向對象編程法則,它指導我們如何設計出鬆耦合、更優良的程序。

        傳統應用程序是由類內部主動創建依賴對象,而導致類與類之間高耦合、難於測試;通過使用IoC容器,把創建和查找依賴對象的控制權轉交給了容器,由容器進行注入組合對象,所以對象之間是鬆耦合的,既便於測試,又有利於功能的複用,更重要的是使得程序的整個體系結構變得非常靈活。

        比如說,要實現某個功能或要完成某個業務邏輯時,至少需要兩個或兩個以上的對象來協作完成。在沒有使用Spring的時候,每個對象在需要使用它的合作對象時,均需要自己通過new關鍵字將合作對象創建出來,那麼,這個合作對象是由自己主動創建出來的,創建合作對象的主動權在自己手上,自己需要哪個對象就主動去創建,創建合作對象的主動權和創建時計是由自己把控的;然而這樣就使得對象之間的耦合度升高。

       例如,A對象需要使用合作對象B來共同完成一個業務邏輯功能,A對象需要使用B對象,那麼A對象就對B對象產生了依賴,也就是A和B對象之間存在一種耦合關係,並且是緊密耦合在一起的;而使用了Spring框架之後就不一樣了,創建合作對象B的工作由Spring來完成,Spring創建好B對象存儲到容器中,當A對象需要使用B對象時,Spring就從存放對象的容器中取出A要使用的B對象,並交給A對象使用。至於Spring是如何創建、何時創建的B對象,對於A對象來說是不需關注的。這便是控制反轉。

       其實,默認情況下Spring容器在啓動時就會創建所有配置過的對象,並將所有的對象存儲在容器中,以便後期使用;除非某一個bean的配置中有lazy-init="true",那麼該bean在調用getBean方法時創建對象。

       然而,又有另一種說法將該思想稱之爲DI( 依賴注入 )。其實,IoC的一個重點是在系統運行中,動態的像某個對象提供它所需要的其他對象。這一點是通過DI來實現的。

       例如,對象A需要查操作數據庫,之前我們是在A中自己編寫代碼來獲取一個Connection對象的,而使用Spring容器之後,就只需要告訴Spring,A對象需要一個數據庫連接的Connection,在系統運行時Spring會在合適的時候創建一個Connection對象然後提供給A對象使用,這樣就完成了對象之間關係的控制。至於DI是如何實現的,這涉及到了Java的反射機制,它允許程序在運行時能夠動態的創建對象,調用對象的方法、以及改變對象的屬性。

     對於Spring的IoC,有三種注入方式:

         ① 根據屬性注入,也稱之爲set方法注入;

         ② 根據構造方法進行注入;

         ③ 根據註解進行注入;

       (2) Spring的另一核心:AOP

        AOP即面向切面編程,它提供了從另一個角度來考慮程序結構,以補充和完善面向對象編程,即可以通過在編譯期間、裝載期間或運行期間實現在不修改源代碼的情況下,給程序動態添加功能的一種技術。

        面向切面編程並不是只在Spring或者Java中才有的,它和麪向對象編程是相對而言的另一種編程思想,是OOP思想的延申。面向切面編程將程序中的交叉業務邏輯(如:安全控制、日誌記錄、事務或異常處理等)封裝成一個切面,然後注入到目標對象(具體的業務邏輯)中去。

       通俗地說,AOP即:把可重用的功能提取出來,將這寫通用功能在覈實的時候織入到應用程序中;

      (3) 關於Spring的基本配置及使用可參考https://blog.csdn.net/sujin_/article/details/78700158

小結以下:

1. Spring是一個爲了解決企業應用開發的複雜性而創建,輕量級的控制反轉(IoC)和麪向切面(AOP)開源容器框架;其目的是爲了簡化企業級應用程序開發。

2. IoC就是控制反轉或者說是依賴注入,通俗的說就是,若在程序中需要某個對象,不用自己通過new關鍵字去手動創建,而是通過Spring的Bean工廠創建。

3. AOP即面向切面編程,通俗的說就是把可重用的功能提取出來,將這寫通用功能在覈實的時候織入到應用程序中;以實現在不修改源代碼的情況下,給程序動態添加功能的一種技術。

4. Spring的IoC和AOP都是爲了解決系統代碼耦合度過高的問題,以提升代碼重用度、降低代碼耦合度、是程序更易於維護。

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