spring的基本理念就是簡化Java開發,spring採取了一下4種關鍵策略:
- 基於POJO的輕量級和最小侵入性編程;
- 通過依賴注入和麪向接口編程實現鬆耦合;
- 基於切面和慣例進行聲明式編程;
- 通過切面和模板減少樣板式代碼。
第一章 Spring之旅
1.1 Spring容器
- 在基於Spring的應用中,應用對象生存於Spring容器中。Spring容器創建對象,裝配它們,配置它們,管路它們的整個生命週期。
- Spring自帶了幾種容器實現,可以歸爲兩種不同的類型。Bean工廠(由org.springframework.beans.factory.BeanFactory接口定義)是最簡單的容器,提供基本的DI(依賴注入Dependency Injection)支持。應用上下文(由org.springframework.context.ApplicationContext接口定義)基於BeanFactory之上構建,並提供面向應用的服務,例如從屬性文件解析文本信息的能力,以及發佈應用時間給感興趣的時間監聽者的能力。
1.2 Spring應用上下文和模塊
1.2.1 Spring常用的3種應用上下文(第七章)
應用上下文 | 說明 |
---|---|
ClassPathXmlApplicationContext | 從類路徑下的XML配置文件中加載上下文定義,把應用上下文定義文件當作類資源 |
FileSystemXmlApplicationContext | 讀取文件系統下的XML配置文件並加載上下文定義 |
XmlWebApplicationContext | 讀取Web應用下的XML配置文件並裝載上下文定義 |
加載應用上下文舉例:
//從文件系統中加載應用上下文
ApplicationContext context = new FileSystemXmlApplicationContext("c:/applicationContext.xml");
//從類路徑(包含JAR文件)下加載應用上下文
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//加載上下文,並訪問bean
ApplicationContext ctx = new ClassPathXmlApplicationContext("com/spring/springdemo/bean/springidol/spring-idol.xml");
<!-- duke是在spring-idol.xml文件中配置的一個實現了Performer接口的類的bean -->
Performer performer = (Performer)ctx.getBean("duke");
performer.perform();
1.2.2 Spring模塊
- 核心Spring容器
- 容器是Spring框架最核心的部分,它負責Spring應用中的Bean的創建、配置和管理。在該模塊中,Bean工廠提供依賴注入(第二章),應用上下文提供了配置Spring的不同方式。該模塊也提供了例如郵件、JNDI訪問、EJB繼承和調度等許多企業服務。
- Spring的AOP模塊
- 在AOP模塊(第4章)中,Spring對面向切面編程提供了豐富的支持。藉助AOP,可以將遍佈應用的關注點(例如事務和安全)從他們所應用的對象中解耦出來。
- 數據訪問與集成
- 使用JDBC編寫代碼通常會導致大量的樣板式代碼。Spring的JDBC和DAO(data access objects)模塊封裝了這些樣板式代碼,使我們的數據庫代碼鞭策簡單明瞭,還可以避免因爲釋放數據庫資源失敗而引發的問題。
- Spring提供了ORM(object-relational mapping)模塊。對許多流行的ORM框架進行了集成,Spring的事務管理(第6章)支持所有的ORM框架以及JDBC。
- 本模塊同樣包含了在JMS之上構建的Spring抽象層,使用消息以異步的方式與其他應用集成。
- Web和遠程調用
- Spring集成了多種流行的MVC框架(第七章),但它的Web和遠程調用模塊自帶了一個強大的MVC框架。該框架提供了兩種形式:面向傳統Web應用的基於Servlet的框架和麪向使用Java Portlet API的基於Portlet的應用。
- 除了面向用戶的Web應用,該模塊還提供了構建與其他應用交互的幾種遠程調用的選擇。Spring遠程調用服務(第10章)集成了RMI、Hessian、Burlap、JAX-WS,同時Spring還自帶了一個遠程調用框架:HTTP invoker。
1.3 Spring的新特性
1.3.1 Spring2.5新特性
Spring2.5的重大意義在於擁抱註解驅動開發,Spring2.5之前的版本都是採用基於XML的配置。Spring2.5引入了幾種使用註解額方式,顯著減少了配置Spring所需要的XML信息。
- 使用@Autowired實現基於註解驅動的依賴注入和使用@Qualifier實現細粒度的自動裝配(auto-wiring)控制。
- 支持JSR-250註解,包括支持命名資源依賴注入的@Resource,以及對生命週期方法支持的@PostConstruct和@PreDestory。
- 自動掃描使用@Component註解(或其他構造型註解)所標註的Spring組件。
- 一個全新的基於註解驅動的SpringMVC編程模型。
- 基於JUnit4和註解的一個新的集成測試框架。
- 完全支持Java 6和Java EE 5。
- 通過Bean的名字來編程切面的新的Bean命名切入點表達式。
- 內嵌支持AspectJ的類加載器織入。
- 新的XML命名空間,包括配置應用上下文細節的context命名空間和配置消息驅動Bean的jms命名空間。
- 支持在SqlJdbcTemplate中使用命名參數。
1.3.2 Spring3.0新特性
從3.0版本開始,Spring要求java 5或更高版本,不再支持Java 4。
- Spring MVC 全面支持Rest,Spring MVC 控制器響應REST風格的URL並返回XML、JSON、RSS或者其他適宜的響應。(第11章)。
- 新的表達式語言把Spring的依賴注入帶入了一個新的高度,允許注入各種來源,包含其他Bean和系統屬性。(第2章)
- Spring MVC 新的註解,包含@CookieValue和@RequestHeader,分別從Cookie和請求頭中獲取值。(第7章)
- 一個新的XML命名空間,用來減少Spring MVC 配置。
- 支持基於JSR-302註解的聲明式校驗。
- 支持新的JSR-330依賴注入規範。
- 通過註解驅動聲明異步和調度方法。
- 一個新的註解驅動的配置模型,幾乎可以避免使用XML進行Spring配置。(第2章)
- Spring Web Service 項目的OXM功能已被遷移到Spring框架核心。
1.3.4 Spring Portfolio
Spring遠不止Spring框架所帶來的那些功能。整個Spring Portfolio包括多個構建於核心Spring框架之上的框架和類庫。概括地說,整個Spring Portfolio幾乎爲每一個領域的Java開發都提供了Spring編程模型。