1)spring的IoC容器是spring的核心,spring AOP是spring框架的重要組成部分。java
IOC依賴注入,典型的工廠模式spring
概念層次:編程
在傳統的程序設計中,當調用者須要被調用者的協助時,一般由調用者來建立被調用者的實例。但在spring裏建立被調用者的工做再也不由調用者來完成,所以控制反轉(IoC);建立被調用者實例的工做一般由spring容器來完成,而後注入調用者,所以也被稱爲依賴注入(DI),依賴注入和控制反轉是同一個概念。緩存
應用層次:安全
將對象交給容器管理,你只須要在spring配置文件總配置相應的bean,以及設置相關的屬性,讓spring容器來生成類的實例對象以及管理對象。在spring容器啓動的時候,spring會把你在配置文件中配置的bean都初始化好,而後在你須要調用的時候,就把它已經初始化好的那些bean分配給你須要調用這些bean的類(假設這個類名是A),分配的方法就是調用A的setter方法來注入,而不須要你在A裏面new這些bean了。性能優化
AOP面向切面編程,典型的代理模式服務器
概念層次:框架
面向方面編程(AOP)是以另外一個角度來考慮程序結構,經過分析程序結構的關注點來完善面向對象編程(OOP)。OOP將應用程序分解成各個層次的對象,而AOP將程序分解成多個切面。spring AOP 只實現了方法級別的鏈接點,在J2EE應用中,AOP攔截到方法級別的操做就已經足夠。性能
應用層次:優化
AOP能夠說是對OOP的補充和完善。OOP引入封裝、繼承和多態性等概念來創建一種對象層次結構,用以模擬公共行爲的一個集合。當咱們須要爲分散的對象引入公共行爲的時候,OOP則顯得無能爲力。也就是說,OOP容許你定義從上到下的關係,但並不適合定義從左到右的關係。例如日誌功能。日誌代碼每每水平地散佈在全部對象層次中,而與它所散佈到的對象的核心功能毫無關係。在OOP設計中,它致使了大量代碼的重複,而不利於各個模塊的重用。將程序中的交叉業務邏輯(好比安全,日誌,事務等),封裝成一個切面,而後注入到目標對象(具體業務邏輯)中去。
Spring實現AOP:JDK動態代理和CGLIB代理 JDK動態代理:其代理對象必須是某個接口的實現,它是經過在運行期間建立一個接口的實現類來完成對目標對象的代理;其核心的兩個類是InvocationHandler和Proxy。 CGLIB代理:實現原理相似於JDK動態代理,只是它在運行期間生成的代理對象是針對目標類擴展的子類。CGLIB是高效的代碼生成包,底層是依靠ASM(開源的java字節碼編輯類庫)操做字節碼實現的,性能比JDK強;須要引入包asm.jar和cglib.jar。使用AspectJ注入式切面和@AspectJ註解驅動的切面實際上底層也是經過動態代理實現的。
實現AOP的技術,主要分爲兩大類:一是採用動態代理技術,利用截取消息的方式,對該消息進行裝飾,以取代原有對象行爲的執行;二是採用靜態織入的方式,引入特定的語法建立「方面」,從而使得編譯器能夠在編譯期間織入有關「方面」的代碼.
2)spring的優勢?
1.下降了組件之間的耦合性,實現了軟件各層之間的解耦
2.可使用容器提供的衆多服務,如事務管理,消息服務等
3.容器提供單例模式支持
4.容器提供了AOP技術,利用它很容易實現如權限攔截,運行期監控等功能
5.容器提供了衆多的輔助類,能加快應用的開發
6.spring對於主流的應用框架提供了集成支持,如hibernate,JPA,Struts等
7.spring屬於低侵入式設計,代碼的污染極低
8.獨立於各類應用服務器
9.spring的DI機制下降了業務對象替換的複雜性
10.spring的高度開放性,並不強制應用徹底依賴於spring,開發者能夠自由選擇spring的部分或所有
3)什麼是DI機制?
依賴注入(Dependecy Injection)和控制反轉(Inversion of Control)是同一個概念,spring以動態靈活的方式來管理對象
spring有三種注入方式:
1.根據屬性注入也叫set方法注入
2.根據構造方法注入
3.根據註解進行注入(推薦)
4)面向切面編程AOP在spring中主要表現爲兩個方面
1.面向切面編程提供聲明式事務管理
2.spring支持用戶自定義的切面
5)AOP使用場景:
Authentication 權限檢查
Caching 緩存
Context passing 內容傳遞
Error handling 錯誤處理
Lazy loading 延遲加載
Debugging 調試
logging, tracing, profiling and monitoring 日誌記錄,跟蹤,優化,校準
Performance optimization 性能優化,效率檢查
Persistence 持久化
Resource pooling 資源池
Synchronization 同步
Transactions 事務管理