很久很久以前,古老的 Java 编程帝国里降生了一个孩子,名为 Spring,它是 Java 帝国最小的王子,同时也是 Java 帝国期待已久的孩子。
它还有三个哥哥,分别是大哥 JSF、二哥 Struts 和三哥 Hibernate,它们一起为JAVA 帝国的编程事业添砖加瓦。
相比三个哥哥的术有术攻,促使 Spring 降生有两个重要原因:
1、使 Java EE 开发更加容易;
2、解决企业应用开发的复杂性而创建,但又不仅限于服务器端的开发,而是所有让 Java 应用都可以从 Spring 中受益。
粉雕玉琢的 Spring 小王子备受 Java 帝国人民的喜爱,以往的需要几个大王子一并合作的项目,Spring 小王子一个人便可完成,它让开发变得更加简单高效。
他是一个基于 POJO (简单 Java 对象)的轻量级框架,最大的特点是其依赖注入方式,在 Spring 中创建 bean 和对象的职责交给了 Spring 框架来统一管理、完成和维护。
2004年,Spring 1.0,彻底改变了开发企业级 Java 应用程序的方式。
2006年,Spring 2.0,在配置里使用自定义的XML命名空间,更小、更简单易懂的配置文件让Spring本身更便于使用。
2007年,Spring 2.5,面向注解的依赖注入模型(即@Component和@Autowired注解),以及面向注解的Spring MVC编程模型。不用再去显式地声明应用程序组件了,也不再需要去继承某个基础的控制器类了。
2009年,Spring 3.0,一套基于Java的全新配置,它能够取代XML,一系列以@Enable开头的注解进一步完善了这一特性,可以写出一个没有任何XML配置的Spring应用程序。
2013年,Spring 4.0,对条件化配置提供了支持,根据应用程序的Classpath、环境和其他因素,运行时决策将决定使用哪些配置,忽略哪些配置。那些决策再也不需要在构建时通过编写脚本确定了(以前会把选好的配置放在部署的包里)。
2017年,Spring 5.0,主要功能是对反应式编程的支持,包括 Spring WebFlux。这是一个全新的反应式 Web 框架, 借鉴了 Spring MVC 的编程模型,允许开发人员创建伸缩性更好且耗用更少线程的 Web 应用程序。
从带着使命感诞生到每个阶段的成长,Spring 小王子为 Java 帝国奉献了一切,从来没有让程序员们失望过。
自诞生以来,Spring 小王子便鼓励 Java 帝国的人民使用模块化的方式进行编程,他使用一个核心容器和很多个其他的模块来搭配,继而满足 Java 帝国建设各种各样的需求。
核心容器
这是 Spring 框架最基础的部分,它提供了依赖注入(DependencyInjection)特征来实现容器对Bean的管理。这里最基本的概念是 BeanFactory ,它是任何 Spring 应用的核心。
BeanFactory 是工厂模式的一个实现,它使用 IoC 将应用配置和依赖说明从实际的应用代码中分离出来。
Spring核心容器包含了以下模块:
应用上下文(Context)模块
核心模块的BeanFactory使Spring成为一个容器,而上下文模块使它成为一个框架。这个模块扩展了BeanFactory的概念,增加了对国际化(I18N)消息、事件传播以及验证的支持。
另外,这个模块提供了许多企业服务,例如电子邮件、JNDI访问、EJB集成、远程以及时序调度(scheduling)服务。也包括了对模版框架例如Velocity和FreeMarker集成的支持。
Spring的AOP模块
Spring在它的AOP模块中提供了对面向切面编程的丰富支持。这个模块是在Spring应用中实现切面编程的基础。为了确保Spring与其它AOP框架的互用性,Spring的AOP支持基于AOP联盟定义的API。
AOP联盟是一个开源项目,它的目标是通过定义一组共同的接口和组件来促进AOP的使用以及不同的AOP实现之间的互用性。通过访问他们的站点,你可以找到关于AOP联盟的更多内容。
Spring的AOP模块也将元数据编程引入了Spring。使用Spring的元数据支持,你可以为你的源代码增加注释,指示Spring在何处以及如何应用切面函数。
JDBC抽象和DAO模块
使用JDBC经常导致大量的重复代码,取得连接、创建语句、处理结果集,然后关闭连接。Spring的JDBC和DAO模块抽取了这些重复代码,因此你可以保持你的数据库访问代码干净简洁,并且可以防止因关闭数据库资源失败而引起的问题。
这个模块还在几种数据库服务器给出的错误消息之上建立了一个有意义的异常层。使你不用再试图破译神秘的私有的SQL错误消息!
另外,这个模块还使用了Spring的AOP模块为Spring应用中的对象提供了事务管理服务。
对象/关系映射集成模块
对那些更喜欢使用对象/关系映射工具而不是直接使用JDBC的人,Spring提供了ORM模块。Spring并不试图实现它自己的ORM解决方案,而是为几种流行的ORM框架提供了集成方案,包括Hibernate、JDO和iBATIS SQL映射。
Spring的事务管理支持这些ORM框架中的每一个也包括JDBC。
Spring的Web模块
Web上下文模块建立于应用上下文模块之上,提供了一个适合于Web应用的上下文。另外,这个模块还提供了一些面向服务支持。
例如:实现文件上传的multipart请求,它也提供了Spring和其它Web框架的集成,比如Struts、WebWork。
Spring的MVC框架
Spring为构建Web应用提供了一个功能全面的MVC框架。虽然Spring可以很容易地与其它MVC框架集成,例如Struts,但Spring的MVC框架使用IoC对控制逻辑和业务对象提供了完全的分离。
它也允许你声明性地将请求参数绑定到你的业务对象中,此外,Spring的MVC框架还可以利用Spring的任何其它服务,例如国际化信息与验证。
如果作为一个整体,Spring 小王子的这些模块已经为 Java 帝国提供了开发企业应用所需的一切,但 Java 人民可以自由地挑选适合自己的应用的模块而忽略其余的模块,而不必将所有的模块完全应用。
基于上面的这些核心模块, Spring 小王子还提供了很多其他的有用的模块,用于构建健壮的基于 Java 帝国的应用程序:
数据库访问模块、事务管理模块、安全模块、Spring集成模块、 批处理模块、消息模块、社交插件等。
经过多年发展, Spring 家族现在已枝繁叶茂,Spring 更是成为 Java 帝国生态系统中最主要的框架,其中Spring 5 的采用率约为 2/3。
家族的工作涵盖了 Java 帝国的J2EE开发、依赖维护、安全批处理、统-数据库访问、大数据、消息处理、移动开发以及微服务等众多领域。
在 Spring 小王子的孩子里面,最耀眼的莫过于 Spring Framework 、 Spring Boot 和 Spring Cloud 这三个小辈。
Spring Framework
◆ 强大的基于 JavaBeans 的采用控制反转(Inversion of Control,IoC)原则的配置管理,使得应用程序的组建更加快捷简易;
◆ 一个可用于从 applet 到 Java EE 等不同运行环境的核心 Bean 工厂;
◆ 数据库事务的一般化抽象层,允许插件式事务管理器,简化事务的划分使之与底层无关。
◆ 内建的针对 JTA 和 单个 JDBC 数据源的一般化策略,使 Spring 的事务支持不要求 Java EE 环境;
◆ JDBC 抽象层提供了有针对性的异常等级(不再从SQL异常中提取原始代码),简化了错误处理,大大减少了程序员的编码量;
◆ 以资源容器,DAO 实现和事务策略等形式与 Hibernate,JDO 和 iBATIS SQL Maps 集成;
◆ 灵活的基于核心 Spring 功能的 MVC 网页应用程序框架;
◆ 提供诸如事务管理等服务的面向方面编程框架。
Spring Framework 就像是 Spring 家族的树根,使 Spring 家族得以在Java开发领域屹立不倒的根本原因,它的目标就是帮助 Java 帝国的开发人员开发出好的系统;
Spring Boot
◆ 可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;
◆ 内嵌Tomcat或Jetty等Servlet容器;
◆ 提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;
◆ 尽可能自动配置Spring容器;
◆ 提供准备好的特性,如指标、健康检查和外部化配置;
◆ 绝对没有代码生成,不需要XML配置。
Spring Boot 相当于 Spring 家族的树干,它的目标是简化新 Spring 应用的初始搭建以及开发过程,致力于在蓬勃发展的快速应用开发领域成为领导者;
Spring Cloud
◆ Spring Cloud Netflix:是对Netflix开发的一套分布式服务框架的封装;
◆ Spring Cloud Config:将配置信息中央化保存, 配置Spring Cloud Bus可以实现动态修改配置文件;
◆ Spring Cloud Bus:分布式消息队列,是对Kafka,MQ的封装;
◆ Spring Cloud Security:对Spring Security的封装,并能配合Netflix使用;
◆ Spring Cloud Zookeeper:对Zookeeper的封装,使之能配置其它Spring Cloud的子项目使用;
◆ Spring Cloud Eureka:Spring Cloud Netflix 微服务套件中的一部分,它基于Netflix Eureka 做了二次封装。
在近几年中,Java 帝国多了一个流行的概念——微服务,帝国人民普遍认为它能解决传统的单体架构应用所带来的顽疾(如代码维护难、部署不灵活、稳定性不高、无法快速扩展等等), 以至于涌现出了一大批帮助实现微服务的工具。
而在它们之中,Spring Cloud 无疑是最令人瞩目的,不仅是因为 Spring 家族在 Java 帝国开发中的重要地位,更是因为 Spring Cloud 提供了一整套微服务实施方案 ,其中包括服务发现、分布式配置、客户端负载均衡、服务容错保护、API网关、安全、事件驱动、分布式服务跟踪等工具,全面地解决了 Java 帝国人民在微服务开发领域所遇到的难点问题。
Spring Cloud 就如同是 Spring 家族这棵参天大树在 Java 帝国的微服务开发领域所结出的硕果。
Spring 家族之所以能够在技术不断更新换代的 IT 领域长盛不衰,并且引领技术发展的潮流,是因为它一直没有偏离最初的目标——根据技术的发展,不断优化和革新,让 Java 应用的开发更加便利和高效。
从XML配置、注解配置,再到Spring Boot的自动化配置,Spring 在不断简化,开发人员需要做的额外工作越来越少。
Spring 的这种基因代代相传,在可以预见的未来,Spring 及其家族产品依然是值得花时间投资学习的技术。
Spring 小王子和它的孩子们,会一直陪伴在每个 Java 帝国人民的身边,共同进步、共同成长。
作者: [美]克雷格·沃斯(Craig Walls)
译者: 张卫滨
本书是一本经典而实用的畅销 Spring 学习指南。第5 版涵盖了 Spring 5.0 和Spring Boot 2.0 里程碑式的更新。全书分为5 个部分,共19 章。第1 部分(第1~5 章)涵盖了构建 Spring 应用的基础话题。第2 部分(第6~9章)讨论如何将Spring 应用与其他应用进行集成。第3 部分(第10~12 章)探讨Spring对反应式编程提供的全新支持。第4 部分(第13~15 章)拆分单体应用模型,介绍SpringCloud 和微服务开发。第5 部分(第16~19 章)讨论如何为应用投入生产环境做准备以及如何进行部署。
本书既适合刚开始学习Spring Boot 和Spring 框架的Java 开发人员快速上手,也适合经验丰富的Spring 开发人员学习Spring 的新特性,尤其适用于企业级Java 开发人员。
作者: 杨开振
《Spring Cloud微服务和分布式系统实践》从企业的真实需求出发,理论结合实际,深入讲解Spring Cloud微服务和分布式系统的知识。
书中既包括Spring Cloud微服务的各类常用组件的讲解,又包括分布式系统的常用知识的介绍。Spring Cloud组件方面主要讲解服务注册和服务发现(Eureka)、服务调用(Ribbon和OpenFeign)、断路器(Hystrix和Resilience4j)、网关(Zuul和Gateway)、配置(Config)、全链路追踪(Sleuth)、微服务的监控(Admin)等;分布式系统方面主要讲解分布式数据库、分布式缓存、会话和权限以及发号机制等。
本书的实践部分通过Apache Thrift讲解了远程过程调用(RPC)在分布式系统中的应用,并且分析了处理高并发的一些常用方法,最后还通过一个简单的实例讲解了微服务系统的搭建。本书适合想要学习Spring Cloud微服务、分布式系统开发的各类Java开发人员阅读,包括初学者和开发工程师。本书对架构师也有一定的帮助。
作者: [印度]J. 夏尔马(J. Sharma)
阿西施·萨林(Ashish Sarin)
译者: 周密
Spring 框架是以简化J2EE 应用程序开发为特定目标而创建的,是当前最流行的Java 开发框架。本书主要介绍Beans 的配置、依赖注入、定制bean、基于Java 的容器、AOP、Spring Data、Spring MVC 等内容。
本书基于非常适合构建JavaWeb 微服务框架的Spring 5 编写,涵盖Java 的函数式编程、RxJava 2 的反应式编程、用Spring WebFlux、Spring Data 和Spring Security 开发反应式RESTful Web 服务等内容。本书适合Web 开发者和想使用Spring 的初学者参考,也可供对Web 开发和Spring 感兴趣的读者参考。
作者: 杨开振
Spring框架是Java EE开发的事实标准,而Spring Boot是业界最流行的微服务开发框架。
本书从一个最简单的工程开始讲解Spring Boot企业级开发,其内容包含全注解下的Spring IoC和AOP、数据库编程、数据库事务、NoSQL技术、Spring MVC、Spring 5新一代响应式框架WebFlux、REST风格和Spring Cloud分布式开发等。
作者: [美]约翰•卡内尔(John Carnell)
译者: 陈文辉
本书以一个实际项目为主线,介绍云、微服务等概念以及Spring Boot和Spring Cloud等诸多Spring项目,并介绍如何将该项目一步一步地从单体架构重构成微服务架构,最终将这个项目拆分成众多微服务,让它们运行在各自的Docker容器中,实现持续集成/持续部署,并最终自动部署到云环境(亚马逊云)中。
作者: 郝佳
本书从核心实现和企业应用两个方面,由浅入深、由易到难地对Spring源码展开了系统的讲解,包括Spring的设计理念和整体架构、容器的基本实现、默认标签的解析、自定义标签的解析、bean的加载、容器的功能扩展、AOP、数据库连接JDBC、整合MyBatis、事务、SpringMVC、远程服务、Spring消息服务等内容。
-END-