Spring IOC/DI、AOP介紹

1.Spring IOC

IOC(Inversion of Control):控制反轉,IOC是一種面向對象的設計思想,可以減低代碼間的耦合度,其中最常見的方式叫做依賴注入(DI)。IOC意味着將你設計好的對象交給容器控制,而不是傳統的在你對象內部控制

控制反轉三個問題: 1.誰控制誰

                                  2.控制了什麼

                                  3.爲什麼反轉了

誰控制誰,控制什麼:在傳統Java代碼中,我們直接在對象內部通過new創建對象,是程序主動去創建對象。而IOC中專門有一個容器來創建這些對象,即由IOC容器來控制對象的創建,主要控制外部資源的獲取(不只是對象還包括文件等)

爲什麼反轉了:有反轉就有正轉,傳統應用程序是由我們在對象中主動控制去直接獲取依賴對象,這就是正轉。反轉是由容器來幫忙創建並注入依賴對象,因爲容器幫我們創建並注入依賴對象,對象只是被動接受依賴對象,所以是反轉,依賴對象的獲取被反轉了

2.Spring DI

DI(Dependency Injection):依賴注入,在容器運行的時候,掃描所有的依賴關係,併爲之動態的注入對應的依賴關係。依賴注入的目的並不是爲軟件系統帶來更多的功能,而是爲了提高組件重用的頻率

依賴注入三個問題:  1.誰依賴誰

                                   2.誰注入誰

                                   3.注入了什麼

誰依賴誰,誰注入誰:應用程序依賴IOC容器。IOC容器注入應用程序依賴的對象

注入了什麼:注入某個對象所需要的資源

總結:

依賴注入是控制反轉的一種實現方式,還有一種方式是依賴查找,這兩個概念就是一個同一個概念的不同角度描述

3.IOC的優缺點

優點:由IOC容器通過配置文件來管理對象的生命週期、依賴關係等,這樣就不需要重新修改並編譯具體的代碼,從而實現組件之間的解耦,提高程序的靈活性和可維護性

缺點:創建對象的步驟變得複雜了,不直觀

           使用反射來創建對象,在效率上會有損耗

           缺少IDE重構的支持,如果修改了類名,需要手動修改XML文件

4.什麼是IOC容器?

IOC容器就是具有依賴注入功能的容器,IOC容器負責實例化、定位、配置應用程序中的對象及建立這些對象中的依賴

5.AOP的思想

AOP將應用系統分爲兩部分,一部分是核心業務邏輯,一部分是橫向的通用邏輯,Spring通過反射機制調用目標類的代碼,動態的將橫切邏輯和業務邏輯交織在一起

6.Spring是如何管理事務的

1).Spring爲事務管理提供了一致的編碼模板,在高層次簡歷了統一的事務抽象,不管選擇Spring JDBC、hibernate、JPA還是選擇MyBatis,Spring都可以讓用戶用統一的編程模型進行事務管理,通過TransactionTemplate並配合使用事務回調TransactionCallback指定具體的持久化操作,就可以通過編程方式實現事務管理,而不需要關注資源的獲取、複用、釋放、事務同步和異常處理等操作

2).在Spring事務管理的抽象層主要包括3個接口:TransactionDefinition用於描述事務的隔離級別、超時時間、是否爲只讀事務和事務傳播規則等控制事務具體行爲的事務屬性,TransactionStatus代表一個事務的具體運行狀態,事務管理器可以通過該接口獲取事務運行期的狀態信息,PlatformTransactionManager事務管理器根據TransactionDefinition提供的事務屬性配置信息創建事務,並用TransactionStatus描述這個激活事務的狀態

3).Spring的聲明式事務管理是通過Spring AOP實現的,通過事務的聲明性信息,Spring負責將事務管理增強邏輯動態織入業務方法的相應連接點中,這些邏輯包括獲取線程綁定資源、開始事務、提交/回滾事務、進行異常轉換和處理等工作,Spring在基於Schema的配置中添加了一個tx命名空間,在配置文件中以明確結構化的方式定義事務屬性,配合AOP命名空間所提供的切面定義,業務類方法事務配置得到了極大的簡化

7.說一下Spring事務機制

Spring有兩種事務處理機制,一種是聲明式事務,一種是編程式事務

Spring的聲明式事務管理在底層是建立在AOP的基礎上的,其本質是對方法前後進行攔截,然後在目標方法開始之前創建或者加入一個事務,在執行完目標方法之後根據執行情況提交或者回滾事務,聲明式事務最大的優點就是不需要通過編程的方式管理事務,這樣就不需要在業務邏輯代碼中摻雜事務管理的代碼,只需要在配置文件中做相關的事務規則聲明(或通過等價的基於標註的方式),便可以將事務規則應用到業務邏輯中,Spring強大的聲明式事務管理功能,這主要得益於Spring依賴注入容器和Spring AOP的支持,依賴注入容器爲聲明式事務提供了基礎設施,使得Bean對於Spring框架而言是可管理的,而Spring AOP則是聲明式事務管理的直接實現者,和編程式事務相比,聲明式事務唯一不足的地方是,後者的最細粒度只能作用到方法級別,無法做到編程式事務那樣可以作用到代碼塊級別

8.Spring如何配置事務

1).使用XML配置聲明式事務

2).使用註解配置聲明式事務

9.Mybatis中#{ }和${ }的區別

#{}可以防止SQL注入,使用#{}的SQL語句會先經過預編譯,經過與編譯後,會=動態解析成一個參數標記符?,而${}在解析時,會直接傳入值

簡單來說就是#{}是先編譯好SQL語句再取值,${}是先取值再編譯SQL語句

 

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