1. Spring MVC簡介 Spring MVC是java EE平臺請求驅動類型的輕量級Web框架,使用了MVC設計模式的思想,spring框架的主要優勢之一就是分層架構,分層架構允許選擇使用任何一個組件,同時也可以集成其它框架技術,例如:Struts2、Hibernate等 Spring框架具 ...
1. Spring MVC簡介
Spring MVC是java EE平臺請求驅動類型的輕量級Web框架,使用了MVC設計模式的思想,spring框架的主要優勢之一就是分層架構,分層架構允許選擇使用任何一個組件,同時也可以集成其它框架技術,例如:Struts2、Hibernate等
Spring框架具有以下特點:
1. 方便解耦,簡化開發。通過spring3提供的IoC容器,可以將對象之間的依賴關係交由Spring3控制,避免編碼所造成的程式過度耦合
2. AOP編程的支持。通過Spring3提供的AOP功能,方便進行面向切麵編程,許多不容易使用面向對象程式設計(OOP)實現的功能可以通過AOP輕鬆實現
3. 聲明式事務的支持。通過聲明方式靈活地進行事務管理,提高開發效率和質量
4. 方便集成各種優秀框架。
Spring框架各個組件的功能:
1. 核心容器
核心容器提供Spring3框架基本的功能。核心容器的主要組件是BeanFactory和ApplicationContext。容器使用控制反轉(IoC)模式將應用程式的配置和依賴性規範和實際的應用程式代碼分開。
2. Spring上下文
Spring上下文是一個配置文件,向Spring框架提供上下文信息。Spring上下文包括企業服務,例如,校驗、JNDI、EJB、電子郵件、國際化等
3. Spring AOP
通過配置管理特性,Spring AOP模塊直接將面向切麵的編程功能集成到Spring框架中,pring AOP模塊提供了事務管理服務。
4. Spring DAO
JDBC DAO抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不同資料庫供應商拋出的錯誤消息。
5. Spring ORM
Spring插入了若幹個ORM框架,從而提供了ORM的工具,其中包括JDO、Hibernate、iBatisSQL Map。
2. Spring IoC(控制反轉)
IoC是Inversion of Control的縮寫,就是通過IoC容器來實現對象組件的裝配和管理。也就是說,所有組件都是被動的,所有的組件初始化和調用都由IoC容器負責。
Spring IoC經常用到一個設計模式——工廠模式,工廠模式提供創建對象的介面。
Spring框架兩個最基本的包是:org.springframework.beans.factory(主要介面是BeanFactory)和org.springframework.context(主要介面是ApplicationFactory)
IoC主要組件:
1. Beans
Beans指項目中提供業務功能Bean,即IoC容器要管理的Bean,Bean可以包含一些屬性的getter和setter方法,也可以包含其他方法
2. 配置文件
Spring對Bean的管理在配置文件中進行.Bean的配置文件是一個xml文件,他通常命名為beans.xml、applicationContext.xml等,配置文件包含Bean的id、類、屬性及其值。IoC容器通過Bean的id從Bean配置文件中取得Bean的類,並生成該配置文件的一個對象。
3. BeanFactory介面及其相關類
BeanFactory採用了工廠設計模式,即Bean容器模式,負責讀取Bean的配置文件,管理對象的生成、載入,維護對象之間的依賴關係,負責Bean對象的生命周期。
org.springframework.beans.factory.BeanFactory是一個頂級介面,它包含管理Bean的各種方法,例如:getBean(String name),,根據Bean的id生成Bean的對象
4. ApplicationContext介面及其相關類
ApplicationContext介面提供高級功能的容器,例如:提供訪問資源文件的更方便的方法,支持國際化等
註入的兩種方式:
1. 設置註入
設置註入是通過setter方法註入被調用者的實例
2.構造註入
利用構造方法來設置依賴註入
3. Spring AOP(面向切麵編程)
AOP為Aspect Oriented Programming的縮寫,即面向切麵編程(也叫面向方面),是一種可以通過預編譯方式和運行期動態代理實現在不修改源代碼的情況下給程式動態統一添加功能的一種技術。
使用AOP技術,可以將一些系統性相關的編程工作,獨立提取出來,獨立實現,然後通過切麵切入進系統。從而避免了在業務邏輯的代碼中混入很多的系統相關的邏輯——比如許可權管理,事物管理,日誌記錄等等。這些系統性的編程工作都可以獨立編碼實現,然後通過AOP技術切入進系統即可。
AOP分為靜態AOP和動態AOP。靜態AOP是指AspectJ實現的AOP,他是將切麵代碼直接編譯到Java類文件中。動態AOP是指將切麵代碼進行動態織入實現的AOP。Spring的AOP為動態AOP,實現的技術為:JDK提供的動態代理技術 和 CGLIB(動態位元組碼增強技術)。儘管實現技術不一樣,但都是基於代理模式,都是生成一個代理對象。