上一節:【第1章 Spring概述與結構】1.2 Spring模塊與結構java
注意:本系列教程不會經過工程單獨依賴某個Jar包,而是經過開源中國的Maven庫,來進行Jar包的依賴管理,因此後續的講解都是以Maven工程的方式,來搭建Spring Demo。git
說在前面,前面第1章內容已簡單介紹了Spring的起源,特色,模塊劃分以及結構說明,相信你們已對Spring有了總體性瞭解,經從本節開始,採用Spring的最新RELEASE版 spring-framework-4.1.6.RELEASE 來說解Spring模塊的使用以及源碼分析。廢話很少說,先簡單介紹下Spring4.0 GA發行版的內容變動,使你們對Spring4.0的內容較於以前的歷史版本有更清晰的認識。 ##Spring4.0 GA介紹## Spring4.0 GA版本支持了衆多Java 8的新特性, 新增了對WebSocket、STOMP等技術的支持,並加強了測試、Web開發的便利性,另外,在這個版本中還刪除了廢棄的方法和類。web
近十年來,Spring框架成爲企業級Java開發中佔據主導地位的編程模型,該框架最先發佈於2004年,其後發佈了幾個重大的版本更新:spring
Spring4.0 GA是最新的主版本,這個版本中包含了大量的新特性以應對Java語言和Java EE規範的發展。 Spring 4.0是首個徹底支持 Java 8 特性的框架,這個版本對環境的最低要求是Java SE 6。Spring 4.0連同其餘的Spring項目,將會應對並帶動下一個十年JVM的新趨勢,包括開發人員生產率(Developer Productivity)、大數據、雲、REST以及微服務架構(Micro Service Architecture)。編程
Spring框架4.0的總體架構以下圖所示: 瀏覽器
Spring 4.0的新特性包括: **對Java 8諸多特性的支持。**如今開發者能夠在Spring的回調接口中使用lambda表達式以及方法引用(method reference),對java.time(JSR-310)提供了很好的支持,一些註解也被更新爲@Repeatable。儘管Spring 4.0還支持Java SE6,可是官方仍是建議在使用Spring 4的新項目中,使用Java 7或8。服務器
**對Java EE 6和7的支持。**Spring在JCP中協助定義相關的規範,框架中對這些規範提供了很好的支持。Spring框架的4.0版本考慮到了JavaEE6以及更高的版本規範,尤爲是JPA 2.0和Servlet 3.0規範。爲了更具技術前瞻性,Spring 框架4.0還支持Java EE 7 中已可用的規範,包括JMS 2.0、JTA 1.二、JPA 2.一、Bean Validation 1.1以及JSR-236 Concurrency Utilities。另外, 對其餘開源庫的支持也提高到了最新版本,如Hibernate、Quartz、EhCache等。websocket
**對WebSocket、SockJS以及STOMP的支持。**Spring 4.0提供了一個名爲 spring-websocket的新模塊,以支持基於WebSocket的、客戶端-服務器的雙向通訊,它與JSR-356Java WebSocket API兼容。另外,還提供了基於SockJS(對WebSocket的模擬)的回調方案,以適應不支持WebSocket協議的瀏覽器。新增的 spring-messaging模塊提供了對STOMP的支持,以及用於路由和處理來自WebSocket客戶端的STOMP消息的註解編程模型。spring-messaging模塊中還包含了Spring Integration項目中的核心抽象類,如Message、MessageChannel、MessageHandler。架構
**對動態語言Groovy的支持。**應用能夠部分或徹底使用Groovy編寫。藉助於Spring 4.0,可以使用Groovy DSL定義外部的Bean配置,這相似於XML Bean聲明,可是語法更爲簡潔。使用Groovy還可以在啓動代碼中直接嵌入Bean的聲明。app
簡化Spring的學習過程。Spring.io網站上提供了全新的「Getting Started」指導和樣例幫助你學習Spring技術。基於Spring框架4.0構建的Spring Boot項目也能夠極大地簡化應用開發中相關配置的複雜性。
**對將來新架構的考量。**像Amazon、Google、Facebook這樣的行業的領導者,目前正在拋棄龐大的Java架構,而是更加傾向於微服務架構以及REST。針對這種趨勢,Spring 4.0中作了充分考慮,在Spring框架中REST是一等公民,在其餘組件如Spring Boot、Spring HATEOAS、Spring Security、Spring Social、Spring Data均是如此。藉助於Spring 框架4.0,開發人員可使用非阻塞的AsyncRestTemplate以及Java語言中的Futures等特性,構建出更加具備交互性、事件驅動的REST服務。Spring對HTML5/WebSocket RFC 6455/JSR-356的支持均有助於建立事件驅動的應用程序。
**Spring框架4.0刪除了全部廢棄的方法和類。**若是你想從一個以前的版本中升級到4.0的話,須要將全部對廢棄方法和類的引用進行更新。
當前我們使用的是最新版Spring Framework 4.1.6,此版本主要是個 bug 修復版本,強烈建議當前全部 4.x 用戶升級!Spring Framework 4.1.6 是第一個正式兼容當前 JDK 8 update 40 的版本 。Spring 4.1.x 支持更普遍,由 Oracle 和 IBM 提供的 Java runtimes 從 2010-era JDK 6 到最新的 2015-era JDK 8。以後,Spring Framework 4.2 將會測試早期 JDK 9 構建,努力支持不一樣的 JDK 版本。 ##Spring下載與說明## 訪問http://repo.spring.io/libs-release-local/org/springframework站點,下載Spring的最新穩定版本。目前最新版本爲spring-framework-4.1.6.RELEASE-dist.zip。解壓縮下載到的壓縮包,解壓縮後的文件夾應用以下幾個文件夾。
**docs:**該文件夾下包含spring的相關文檔、開發指南及API參考文檔。 **libs:**該文件夾下包含spring各模塊的jar包,須要到哪一個模塊,直接依賴相關模塊jar包。Spring各模塊jar包說明以下圖:
若是咱們在使用Spring某個模塊時,必需要依賴模塊所需的其餘Spring模塊或者外部JAR包,Spring模塊JAR包依賴關係以下圖: **schema:**該文件下包含spring XML配置文件所依賴的schema文件。
##HelloWorld之搭建## ###POM文件配置### 根據上面的JAR包依賴關係,Spring Java Project 工程至少須要依賴如下幾個JAR文件:
<dependencies> <!-- 1. Spring 至少依賴包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </dependency> <!-- END --> </dependencies>
###定義Bean###
package com.king.helloworld.bean; /** * @author taomk * @version 1.0 * @since 15-7-7 下午4:06 */ public class HelloWorld { private String name; public void setName(String name) { this.name = name; } public void hello() { System.out.println("Hello, " + name); } }
###配置ApplicationContext.xml###
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="helloWorld" class="com.king.helloworld.bean.HelloWorld"> <property name="name" value="Tao Bangren"/> </bean> </beans>
###運行Main###
public class Main { public static void main (String [] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-bean.xml"); HelloWorld helloWorld = (HelloWorld) context.getBean("helloWorld"); helloWorld.hello(); } }
結果輸出:
本文涉及到的源代碼:king-spring