一、Spring基本概念
1、Spring是什么?
1)Spring是一種多層的J2EE應用程序框架,其核心就是提供一種新的機制管理業務對象及其依賴關系;
2)spring是容器框架,創建bean,維護bean之間的關系;
3)spring可以管理web層,持久層,業務層,dao層,service層等,spring可以配置各個層的組件,並且維護各個層的關系。
2、Spring的核心及其組成
1)Spring Core 核心容器
是Spring框架最基礎的部分,提供了依賴注入(DI,Dependency Injection)特征來實現容器對Bean的管理。最基本的概念是BeanFactory,它是任何Spring應用的核心。BeanFactory是工廠模式的一個實現,它使用IoC將應用配置和依賴說明從實際的應用代碼中分離出來。
2)Context 應用上下文
是一個配置文件,BeanFactory使Spring成為容器,而上下文模塊使它成為框架。該模塊擴展了BeanFactory的概念,增加了對國際化(I18N)消息、事件傳播以及驗證的支持。
3)AOP 面向切面編程
其提供了對面向切面編程的豐富支持。
4)JDBC抽象和DAO模塊
JDBC經常導致大量的重復代碼,比如連接、創建、處理、關閉,而Spring的JDBC和DAO模塊抽取了這些重復代碼,因此用戶可以保持數據庫訪問代碼簡潔,並且可以防止因關閉數據庫資源失敗而引起的問題。使用了Spring的AOP模塊為Spring應用中的對象提供了事物管理服務。
5)對象/關系映射集成模塊
Spring提供了ORM模塊。Spring並不試圖實現它自己的ORM解決方案,而是為幾種流行的ORM框架提供了集成方案。Spring的事物管理支持ORM與JDBC。
6)Spring的Web模塊
其建立於應用上下文模塊之上,提供了一個適合於Web應用的上下文。還提供了一些面向服務支持,也提供了Spring和其它Web框架的集成,比如Struts、Mybatis。
7)Spring的MVC框架
功能全面,可利用Spring的任何其它服務,其使用IoC對控制邏輯和業務對象提供了完全的分離。
二、Spring特點
1、輕量級:輕量級是針對重量級容器(EJB)來說的,Spring的核心包就不到1M大小,而使用Spring的核心包所需的資源也很小,所以可以在小型設備中使用。
2、非入侵式:Spring目標是一個非入侵式的服務框架。原因是所有框架都是提供大量的功能供用戶去使用,從而簡化開發時間和成本,但由於大量的使用了框架的API,使應用程序和框架發生了大量的依賴性,無法從框架中獨立出來,更加無法使程序組件在其他程序中使用。
3、容器:
1)Spring提供了容器功能,容器可以管理對象的生命周期、對象與對象間的關系、我們可以通過編寫XML來設置對象關系和初始值,這樣容器在啟動之后,所有的對象都直接可以使用,不用編寫任何編碼來產生對象。
2)Spring有兩種不同的容器:
. Bean工廠(org.springframework.beans.factory.BeanFactory)是最簡單的容器(是Spring基本的IOC容器),提供了基礎的依賴注入支持。
. 應用上下文(org.springframework.context.ApplicationContext)建立在Bean工廠基礎之上,提供了系統構架服務。
4. IOC / DI:
1)Spring最核心的概念就是IOC(Inverse of Control 控制反轉,所謂控制反轉就是應用本身不負責依賴對象的創建及維護,依賴對象的創建及維護是由外部容器負責的。這樣控制權就由應用轉移到了外部容器,控制權的轉移就是所謂反轉),控制反轉概念並不是那么直觀,所以Martin Fowler引入了了DI(Dependency Injection 依賴注入,所謂依賴注入就是指:在運行期,由外部容器動態地將依賴對象注入到組件中)概念來代替IOC。
2)使用Spring我們不必在程序中維護對象的依賴關系,只要在XML中設定,Spring容器會自已根據相關的配置去產生他們之間的關系,相當於所有的關系都是在容器運行的時候注入的,而本身他們是沒有關系的。
5. AOP:
1)Spring最被人重視的另一個方面就是對AOP的支持,其實AOP只是Spring支持的一個子容器。
2)AOP在一個服務流程中插入與業務邏輯無關的系統服務邏輯,如:日志、權限驗證、異常處理、事務等,而把這些獨立出來設計成一個對象,這樣的對象稱為Aspect。
注:AOP后續會單獨做詳細講解
6. 持久層:Spring提供了對持久層的整合,如對JDBC的使用加以封裝簡化,提供事務功能,對ORM工具如Hibernate等的整合。
7. Web框架整合:Spring也提供了Web的MVC解決方案,可以很好的善用IOC和AOP的功能,可以輕松的替換掉View層,如使用JPS,也可以使用熟悉的web容器,如struts技術與spring整合。
三、spring核心原理
1、IOC 控制反轉
概念:控制權由對象本身轉向容器,由容器根據配置文件創建對象實例並實現各個對象的依賴關系。
核心:bean工廠
2、AOP 面向切面編程
1)靜態代理
a、根據每個具體類分別編寫代理類
b、根據一個接口編寫一個代理類
2)動態代理
針對一個方面編寫一個InvocationHandler,然后借用JDK反射包中的Proxy類為各種接口動態生成相應的代理類。