当前位置:首页>Java>Spring>Spring教程>Spring教程

Spring教程

作者:微学网发布时间:2019-08-15 22:10:27

Spring产生的历史背景

Spring的诞生

Spring诞生之初是以J2EE的挑衅者身份而为广大Java开发者所熟知的。

特别是当时J2EE平台中的EJB(Enterprise Java Beans)标准,由于其设计本身的缺陷,导致在开发过程中使用非常复杂,代码侵入性很强。

又由于EJB是依赖于容器实现的,因此进行单元测试也变得极其困难,最终的后果是大多数开发者对Java企业级开发望而却步。

为此,Rod Johnson为Java世界带来了Spring,其目标就是要简化Java企业级开发。

Spring与Java EE的关系

Spring不是来挑战整个JavaEE平台的,最初主要是为了改进以EJB为核心的Java EE开发方式。

Spring致力于突破传统JavaEE开发的困境,从实际需求出发,重点构建可移植、灵活、易于开发、测试和部署的轻量级开发框架。

传统的JavaEE应用程序开发效率较低,应用服务器供应商对各种技术的支持并没有真正统一。

因此,JavaEE应用程序还没有真正实现“Write Once,Run Anywhere”(一次编写,到处运行)的承诺。

Spring作为一种开源中间件,独立于各种应用服务器,它还可以提供应用服务器功能,如声明性事务、事务处理等,而不需要应用服务器的支持。

有些人会认为Spring和JavaEE是有竞争关系的,但实际上Spring是对JavaEE的改进和补充。

Spring本身还集成了许多JavaEE平台规范,如servlet API(JSR340)、WebSocket API(JSR 356)、Concurrency Utilities(JSR 236)、JSON Binding API(JSR367)、Bean Validation(jsr303)、jpa(jsr 338)、jms(jsr914)、Dependency Injection(jsr 330)、Common Annotations(jsr250)等。

今天,Spring已经成为构建Java EE应用的事实标准,Spring成为了大多数Java项目的首选框架。

什么是Spring

术语 Spring 在不同的背景下意味着不同的东西。它可以用来引用Spring Framework项目本身,它就是一切开始的地方。

随着时间的推移,其他Spring项目已经构建在Spring Framework之上。大多数情况下,当人们说Spring时,他们就意味着整个项目家族。

Spring框架分为几个模块。应用程序可以选择所需的模块。核心是核心容器的模块,包括配置模型和依赖注入机制。除此之外,Spring Framework还为不同的应用程序体系结构提供了基础支持,包括消息传递,事务数据和持久性以及Web。它还包括基于Servlet的Spring MVC Web框架,以及Spring WebFlux响应式Web框架。

狭义上的Spring

狭义上的Spring指的是Spring 框架(Spring Framework)。

Spring框架是为了解决企业应用开发的复杂性而创建的,它的主要优势之一就是分层架构。

分层架构允许使用者选择使用哪一个组件,同时为JavaEE应用程序开发提供集成的框架。

Spring框架使用基本的POJO来完成以前只可能由EJB完成的事情。

Spring框架不仅仅限于服务器端的开发,而且从简单性、可测试性和松耦合的角度来看,Java应用开发均可以从Spring框架中获益。

Spring框架的核心是控制反转(loC)和面向切面(AOP)。

简单来说,Spring框架是一个分层的、面向切面与Java应用的一站式轻量级开源框架。

广义上的Spring

广义上的Spring是指以Spring框架为核心的Spring技术栈。
这些技术栈涵盖了从企业级应用到云计算等各个方面的内容。

主要有 Spring Data、Spring Batch、Spring Integration、Spring Security、Spring Mobile、Spring for Android、Spring Boot、Spring Cloud。

Spring是轻量级框架

  • 可以构件任何应用程序

与许多其他框架(比如Struts)不同,可以使用Spring构建Java中的任何应用程序(例如,独立的应用程序、Web应用程序或JavaEE应用程序)。

  • 轻量级

轻量级这个词实际上并不意味着代码的数量或发布的大小,而是对Spring原则的整体定义:最微小的影响。

从某种意义上说,Spring是轻量级的,因为Spring核心的好处可以通过对应用程序代码进行很少的更改(如果有的话)来实现。

如果你想在任何时候停止使用Spring,你会发现很容易做到。

Spring的目标

简化Java的开发

Spring的设计指导原则

  • 在每个级别提供选择
    Spring允许开发人员尽可能推迟设计决策。
    例如,您可以通过配置持久性框架而不更改代码来切换它。许多其他基础架构问题和与第三方API的集成是相同的。

  • 适应不同的观点
    Spring具有灵活性,并没有设定事情应该如何做。它以不同的角度支持广泛的应用需求。

  • 保持强大的向后兼容性
    Spring的演变都会经过精心设计,以避免版本之间发生重大变化。
    Spring支持精心选择的一系列JDK版本和第三方库,以便于维护依赖于Spring的应用程序和库。

  • 精心设计API
    Spring团队花费了大量的精力和时间来创建直观的API,并且会长期支持多种版本。

  • 为代码质量设定高标准
    Spring框架强调有意义的、最新的、准确的Javadoc。
    这在开源项目中非常罕见。
    很少有项目能够做到简单的代码结构并确保包之间没有循环依赖关系

Spring框架

Spring框架

Spring框架的发展

Spring框架源自RodJohnson编写的Expert One-on-One:J2EE Design and Development一书(Wrox出版社,2002年出版)。

在过去十年中,Spring框架在核心功能、相关项目以及社区支持方面发展迅猛。

随着Spring框架的新主要版本的推出,有必要快速回顾一下Spring的每个里程碑版本所带来的重要特性,并最终发展到Spring Framework 5.0。

更多请参考 Spring的发展历史

Spring框架的介绍

Spring 框架是整个Spring技术栈的核心。

Spring框架实现了对bean的依赖管理及AOP的编程方式,这些都极大地提升了Java企业级应用开发过程中的编程效率,降低了代码之间的耦合。

Spring框架是很好的一站式构建企业级应用的轻量级的解决方案。

模块化

允许开发人员自由选择需要使用的部分。

例如,可以在任何框架上使用IoC容器,也可以只使用Hibernate集成代码或JDBC抽象层。

Spring框架支持声明式事务管理,通过RMI或Web服务远程访问用户的逻辑,并支持多种选择来持久化用户的数据。

它提供了一个全功能的Spring MVC及Spring WebFlux框架,同时它也支持AOP集成到软件中。

Spring框架的优点

  • 非侵入式设计
    Spring是一种非侵入式(non-invasive)框架,它可以使应用程序代码对框架的依赖最小化。

  • 方便解耦、简化开发
    Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护工作都交给Spring容器的管理,大大的降低了组件之间的耦合性。

  • 支持AOP
    Spring提供了对AOP的支持,它允许将一些通用任务,如安全、事物、日志等进行集中式处理,从而提高了程序的复用性。

  • 支持声明式事务处理
    只需要通过配置就可以完成对事物的管理,而无须手动编程。

  • 方便程序的测试
    Spring提供了对Junit4的支持,可以通过注解方便的测试Spring程序。

  • 方便集成各种优秀框架
    Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如Struts、Hibernate、MyBatis、Quartz等)的直接支持。

  • 降低Jave EE API的使用难度。
    Spring对Java EE开发中非常难用的一些API(如JDBC、JavaMail等),都提供了封装,使这些API应用难度大大降低。

Spring框架的主要模块

Spring框架基本涵盖了企业级应用开发的各个方面,它由二十多个模块组成。

spring-core
spring-beans
spring-context
spring-web
spring-aop
spring-tx
spring-oxm
spring-orm
spring-webmvc
spring-context-indexer
spring-context-support
spring-instrument
spring-webflux
spring-aspects
spring-jcl
spring-jdbc
spring-test
spring-websocket
spring-beans-groovy
spring-expression 
spring-jms
spring-framework-bom
spring-messaging

核心容器

核心容器(Core Container)由spring-core、spring-beans、spring-context、spring-context-support和spring-expression(Spring Expression Language)模块组成。

  • spring-core和 spring-beans模块提供框架的基础部分,包括IoC和Dependency Injection功能。
    BeanFactory是一个复杂工厂模式的实现,无须编程就能实现单例,并允许开发人员将配置和特定的依赖从实际程序逻辑中解耦。

  • Context(spring-context)模块建立在Core和Beans模块提供的功能基础之上。
    它是一种在框架类型下实现对象存储操作的手段,有一点像JNDI注册。Context继承了Beans模块的特性,并且增加了对国际化的支持(如用在资源包中)、事件广播、资源加载和创建上下文(如一个Servlet容器)。
    Context 模块也支持如EJB、JMX和基础远程访问的JavaEE特性。ApplicationContext接口是Context模块的主要表现形式。
    spring-context-support模块提供了对常见第三方库的支持,以便集成到Spring应用上下文,如缓存(EhCache、JCache)、调度(CommonJ、Quartz)等。

  • spring-expression模块提供了一种强大的表达式语言,用来在运行时查询和操作对象图。
    它是作为JSP2.1规范所指定的统一表达式语言的一种扩展。这种语言支持对属性值、属性参数、方法调用、数组内容存储、收集器和索引、逻辑和算数的操作及命名变量,并且通过名称从Spring的控制反转容器中取回对象。表达式语言模块还支持列表投影、选择和通用列表聚合。

AOP及Instrumentation

spring-aop模块提供AOP(面向切面编程)的实现,从而能够实现方法拦截器和切入点完全分离代码。

使用源码级别元数据的功能,也可以在代码中加入行为信息,在某种程度上类似于.NET属性。

单独的spring-aspects模块提供了集成使用AspectJ。

spring-instrument 模块提供了类instrumen-tation的支持和在某些应用程序服务器使用类加载器实现。

spring-instrument-tomcat用于Tomcat Instrumentation代理。

消息 Message

Spring Framework 4版本开始提供spring-messaging模块。

主要包含从Spring Integration项目中抽象出来的,如Message、MessageChannel、MessageHandler及其他用来提供基于消息的基础服务。

该模块还包括一组消息映射方法的注解,类似基于编程模型中的Spring MVC的注解。

数据访问/集成

数据访问/集成(Data Access/Integration)层由JDBC、ORM、OXM、JMS和Transaction模块组成。

  • spring-jdbc模块提供了一个JDBC抽象层,这样开发人员就能避免进行一些烦琐的JDBC编码和解析数据库供应商特定的错误代码。

  • spring-tx模块支持用于实现特殊接口和所有POJO类的编程及声明式事务管理。

  • spring-orm模块为流行的对象关系映射API提供集成层,包括JPA和Hibernate。使用spring-orm模块,可以将这些O/R映射框架与Spring提供的所有其他功能结合使用,如前面提到的简单的声明式事务管理功能。

  • spring-oxm模块提供了一个支持Object/XML映射实现的抽象层,如JAXB、Castor、JiBX和XStream。

  • spring-jms 模块包含用于生成和使用消息的功能。从Spring Framework4.1开始,它提供了与spring-messaging的集成。

Web

Web层由spring-web、spring-webmvc、spring-websocket和spring-webflux组成。

  • spring-web模块提供了基本的面向Web开发的集成功能,如文件上传及用于初始化IoC容器的Servlet 监听和Web开发应用程序上下文。它也包含HTTP客户端及Web相关的Spring远程访问的支持。

  • spring-webmvc 模块(也称Web Servlet模块)包含Spring的MVC功能和REST服务功能。

  • spring-websocket模块是基于WebSocket协议通信的程序开发。

  • spring-webflux模块是Spring5新添加的支持响应式编程的Web开发框架。

测试

spring-test模块支持通过组合JUnit或TestNG来实现单元测试和集成测试等功能。

它不仅提供了Spring ApplicationContexts的持续加载,并能缓存这些上下文。

而且提供了可用于孤立测试代码的模拟对象(mock objects)。

Spring官网

Spring官网地址:https://spring.io

Spring官网图片

Spring核心学习内容

作为开发者并不需要掌握 Spring 的所有模块,但是 Spring FrameworkSpring BootSpring Cloud 这三大模块是所有 Java 开发者必须要掌握的。

Spring Framework 是整个 Spring 生态的基础,各个模块都是基于 Spring Framework 衍生出来的。

Spring Framework

Spring Boot 是一个快速开发框架,让开发者可以迅速搭建一套基于 Spring 的应用程序,并且将常用的 Spring 模块以及第三方模块,如 MyBatis、Hibernate 等都做了很好的集成,只需要简单的配置即可使用,不需要任何的 XML 配置文件,真正做到了开箱即用,同时默认支持 JSON 格式的数据,使用 Spring Boot 进行前后端分离开发也非常便捷。

Spring Cloud 是一套整合了分布式应用常用模块的框架,使得开发者可以快速实现微服务应用。作为目前非常热门的技术,有关微服务的话题总是在各种场景下被大家讨论,企业的招聘信息中也越来越多地出现对于微服务架构能力的要求。

Spring Cloud

确实,作为当今互联网时代最先进的业务架构解决方案,微服务发展非常迅速,关注点不仅仅放在开发层面,更多的是开发运维逐步一体的思路。

有些读者可能会认为,我现在就是一个初级程序员,把业务逻辑代码写好就可以了,不需要关心架构层面的东西。这种想法过于片面了,不论你现在处于什么阶段,架构方面的东西早晚都要接触,打个比方,当搬砖对你来说已经驾轻就熟了,这时就需要去思考怎么设计房子,也就是从 CRUD 业务操作到软件设计架构的进阶。

怎样提高自己的软件架构能力呢?首先你要具备扎实的基础知识,第二要有足够的项目经验,第三要视野开阔,技术领域的涉猎面要广。整个学习过程周期是比较长的,需要通过反复的实践,发现问题,解决问题来逐步完善你对于架构的理解,需要沉淀才能到达一定高度,很多之前不理解的东西自然就理解了,因此,从长远角度来看,即使你目前只是一个初级开发者,学习微服务也是非常有必要的。

微服务架构的落地框架有很多,对于 Java 开发者而言,当 Spring 框架已经成为事实上的行业标准时,Spring Cloud 作为 Spring 全家桶的重要一员,自然就是大家的首选,通过横向对比也可以得出结论,Spring Cloud 确实是微服务架构中一个十分优越的解决方案。

Spring核心家庭成员

Spring Framework

Spring Framework 就是我们通常所说的 Spring 框架,它是一个软件设计架构层面的框架,为基于 Java 的企业级应用程序提供了一套标准流程和配置模型,可部署在任何类型的平台上。Spring 优势在于为开发者提供了应用级别的基础结构支持,实现应用层面的解耦合,允许开发者自主选择相关组件,开发者只需专注于业务逻辑的开发,不需要关注特定的部署环境。

Spring Web MVC

Spring Web MVC(官方名称)就是我们通常所说的 Spring MVC,它是 Spring Framework 中的一个模块,是 Spring Framework 在 Web 领域实现 MVC 设计模式的具体方案,主要是基于 DispatcherServer 的前端路由处理和 ViewResolver 视图解析器来简化开发者的工作效率。

Spring Boot

Spring Boot 是目前 Spring 全家桶系列中最流行的一个产品,在 Spring 官网的介绍排在第一位,可见对其重视程度,Spring 官方对 Spring Boot 的描述是“build anything”,翻译过来是构建任何事物,这样一个非常简单的描述将 Spring Boot 的特点展现的淋漓尽致,即通过 Spring Boot 可以快速构建一个基于 Spring 的独立生存级别的应用程序,开发者直接运行程序即可,无需处理各种繁琐的配置文件。简单理解,Spring Boot 就是为了让开发者快速启动和运行 Spring 应用程序而设计的。

Spring Cloud

Spring 官方对 Spring Cloud 的描述是“coordinate anything”,翻译过来是协调任何事物,通过这个描述可以明确 Spring Cloud 并不是为了实现某个业务模块而存在的,它是一个集大成者,将分布式系统开发中常用的模块进行整合,如服务注册、服务发现、配置管理、熔断器、控制总线等,基于 Spring Boot 形成一套框架体系,开箱即用,使得开发者可以快速实现分布式、微服务应用。

Spring Data

Spring Data 是 Spring 提供的持久层产品,主要功能是为应用程序中的数据访问提供统一的开发模型,同时保留不同数据存储的特殊性,并且这套开发模式是基于 Spring 的。根据不同类型的数据存储类型又可分为 Spring Data JDBC、Spring Data JPA、Spring Data Redis、Spring Data MongoDB 等,适用于关系型数据库和非关系型数据库。

Spring Security

Spring Security 是 Spring 提供的一个功能强大的安全框架,为 Java 应用程序提供授权功能,通过定制身份验证来实现对于访问权限的控制,Spring Security 的特点在于扩展性好,可以根据具体的业务需求来实现定制验证服务。