上一节:【第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