一、引言
说起 SpringBoot 不得不先了解一下 Spring 这个企业,不仅因为 Spring Boot 来源于 Spring 大家族,而是 Spring Boot 的诞生和 Sping 框架的发展息息相关。
二、Spring 历史
2002 年正是 Java EE 和 EJB 大行其道的时候,很多知名公司都是采用此技术方案进行项目开发。一个美国的小伙子 Rod Johnson 认为 EJB 太过臃肿,并不是所有的项目都需要使用 EJB 这种大型框架,应该会有一种更好的方案来解决这个问题。于是他写了一本书《 Expert One-on-One J2EE 》,介绍了当时 Java 企业应用程序开发的情况,并指出了 Java EE 和 EJB 组件框架中存在的一些主要缺陷。在这本书中他提出了一个基于普通 Java 类和依赖注入的更简单的解决方案,这也就是 Spring 的前身。
随后 Spring 发展进入快车道:
- 2004 年 03 月,1.0 版发布。
- 2006 年 10 月,2.0 版发布。
- 2007 年 11 月更名为 SpringSource,同时发布了 Spring 2.5。
- 2009 年 12 月,Spring 3.0 发布。
- 2013 年 12 月,Pivotal 宣布发布 Spring 框架 4.0。
- 2017 年 09 月,Spring 5.0 发布。
1、Spring 1.x 时代
在 Spring1.x 时代,都是通过 xml 文件配置 Bean ,随着项目的不断扩大,需要将 xml 配置分放到不同的配置文件中,需要频繁地在 java 类和xml 配置文件中切换。
2、Spring 2.x 时代
随着 JDK 1.5 带来的注解支持,Spring2.x 可以使用注解对 Bean 进行申明和注入,大大的减少了 xml 配置文件,同时也大大简化了项目的开发。 那么,问题来了,究竟是应该使用 xml 还是注解呢?
最佳实践:
- 应用的基本配置用 xml,比如:数据源、资源文件等;
- 业务开发用注解,比如:Service 中注入 bean 等;
3、Spring 3.x 到 Spring 4.x
从 Spring3.x 开始提供了 Java 配置方式,使用 Java 配置方式可以更好的理解你配置的 Bean,并且 Spring4.x 和SpringBoot 都推荐使用 java 配置的方式
在Java开发领域,Sping 应用很广,它的极致目标是简化Java开发,从2003年崭露头角至今,估计连 Rod Johnson 本人都没有想到,在 Java 领域,它会产生如此深远的影响。
三、SpringBoot 的诞生
随着使用 Spring 进行开发的个人和企业越来越多,Spring 也从单一简洁的小框架变成一个大而全的开源软件,Spring 的边界不断扩充,到了后来 Spring 几乎可以做任何事情了,可以集成了市面上主流的开源软件、中间件。 而Spring 每集成一个开源软件,就需要增加一些基础配置,慢慢地随着开发的项目越来越庞大,往往需要集成很多开源软件,因此后期使用 Spring 开发大型项目需要引入很多配置文件,太多的配置非常难以理解,并容易配置出错,到了后来人们甚至称 Spring 为配置灾难。
四、什么是Springboot?
在上述环境下,SpringBoot 应运而生。它使用“习惯优于配置”(项目中存在大量的配置,此外还内置一个习惯性的配置,让你无须手动进行配置)的理念让 Java 项目快速运行起来。使用 SpringBoot 很容易创建一个独立运行(运行 Jar ,内嵌 Servlet 容器)、准生产级别的基于 Spring 的框架项目,使用 SpringBoot 你可以不用或者只需要很少的 Spring 配置。 用白话来理解,就是 SpringBoot 其实不是什么新框架,它默认配置了很多框架的使用方式,就像 Maven 整合了所有的 Jar 包,SpringBoot 整合了几乎所有的框架。
五、SpringBoot 特点
- 使用 Spring 项目引导页面可以在几秒构建一个项目
- 方便对外输出各种形式的服务,如 REST API、WebSocket、Web、Streaming、Tasks
- 非常简洁的安全策略集成
- 支持 关系数据库 和非关系数据库
- 支持运行期内嵌容器,如 tomcat 、Jetty
- 强大的开发包,支持热启动
- 自动管理依赖
- 自带应用监控
- 支持各种 IDE,如 IntelliJ IDEA 、NetBeans
六、SpringBoot 优势
1、SpringBoot 开发更简单
SpringBoot 对开发效率的提升是全方位的,我们可以简单做一下对比:
使用 Spring 我们开发一个 web 项目需要做哪些工作:
1)配置 web.xml,加载 Spring 和 Spring mvc 2)配置数据库连接、配置 Spring 事务 3)配置加载配置文件的读取,开启注解 4)配置日志文件 … n) 配置完成之后部署 tomcat 调试 可能你还需要考虑各个版本的兼容性,jar 包冲突的各种可行性。
那么使用 SpringBoot 之后我们需要开发一个 web 项目需要哪些操作呢?
- 登录网址 选择对应的组件直接下载
- 导入项目,直接开发
上面的 N 步和下面的 2 步形成巨大的反差,这仅仅只是在开发环境搭建方面。
2、SpringBoot 测试更简单
SpringBoot 对测试的支持强大,SpringBoot 内置了 7 种强大的测试框架:
- JUnit: 一个 Java 语言的单元测试框架
- Spring Test & SpringBoot Test:为 Spring Boot 应用提供集成测试和工具支持
- AssertJ:支持流式断言的 Java 测试框架
- Hamcrest:一个匹配器库
- Mockito:一个 java mock 框架
- Json assert:一个针对 JSON 的断言库
- JsonPath:JSON XPath 库
只需要在项目中引入 spring-boot-starter-test 依赖包,就可以对数据库、Mock、 Web 等各种情况进行测试。
3、pringBoot 配置更简单
SpringBoot 的核心思想: 约定优于配置 。
约定优于配置(convention over configuration),也称作按约定编程,是一种软件设计范式,旨在减少软件开发人员需做决定的数量,获得简单的好处,而又不失灵活性。
本质是说,开发人员仅需规定应用中不符约定的部分。例如,如果模型中有个名为 User 的类,那么数据库中对应的表就会默认命名为 user。只有在偏离这一约定时,例如将该表命名为 ”user_info”,才需写有关这个名字的配置。
4、 SpringBoot 部署更简单
SpringBoot 内嵌容器,不仅仅让部署变得简单,其实在开发调试阶段也非常便利,对比以往 Spring 开发 Web 项目时配置 Tomcat 的繁琐。使用 SpringBoot 开发 Web 项目,让我们不需要关心容器的环境问题,专心写业务代码即可。
Jenkins 是目前持续构建领域使用最广泛的工具之一,使用 Jenkins 部署 SpringBoot 项目非常简单,大家想继续了解可以参考我的文章:使用Jenkins部署Spring Boot,只需要前期做一些简单的配置,所以 Spring Boot + Docker + Jenkins 会将 SpringBoot 项目的部署做得更简单。
七、Spring 、SpringBoot 和 SpringCloud 的关系
Spring 两大核心功能 Ioc 和 Aop 成就了 Spring,Spring 在这两大核心的功能上不断的发展,才有了 Spring 事务、Spring Mvc 等一系列伟大的产品,最终成就了 Spring 帝国,到了后期 Spring 几乎可以解决企业开发中的所有问题。
SpringBoot 是在强大的 Spring 帝国生态基础上面发展而来,发明 Spring Boot 不是为了取代 Spring ,是为了让人们更容易的使用 Spring 。所以说没有 Spring 强大的功能和生态,就不会有现在的 SpringBoot 火热, SpringBoot 使用 约定优于配置 的理念,重新重构了 Spring 的使用,让 Spring 后续的发展更有生命力。
Spring Cloud 是一系列框架的有序集合。它利用 SpringBoot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 SpringBoot 的开发风格做到一键启动和部署。
Spring 并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过 SpringBoot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的 分布式系统 开发工具包。
Spring Cloud 是为了解决微服务架构中服务治理而提供的一系列功能的开发框架,并且 Spring Cloud 是完全基于 SpringBoot 而开发,Spring Cloud 利用 SpringBoot 特性整合了开源行业中优秀的组件,整体对外提供了一套在 微服务 架构中服务治理的解决方案。
综上所述,正是由于 Spring Ioc 和 Spring Aop 两个强大的功能才有了 Spring ,Spring 生态不断的发展才有了 SpringBoot ,使用 SpringBoot 让 Spring 更易用更灵活,Spring Cloud 是基于 SpringBoot 开发的一套微服务架构下的服务治理方案。
用一个简单的包含关系来表达它们之间的关系。
Spring iocaop > Spring > SpringBoot > SpringCloud
八、小结
天下“武功”,唯快不破。好的开源软件也应该如此,SpringBoot 的出现正是让 Java 编程变得更简单、更快速。