为什么选择 Spring Boot
Spring Boot 的理念
Spring Boot BUILD ANYTHING
以上引用来自 Spring 官网,表示使用 Spring Boot 构建一切。下图中 Spring Boot 位于 Spring 三个重量级产品第一位,可以看出 Spring 官方也非常重视 Spring Boot 的发展并将其放置于一个很高的位置。
Spring Boot is designed to get you up and running as quickly as possible, with minimal upfront configuration of Spring. Spring Boot takes an opinionated view of building production ready applications.
简化开发
“当你终于把 Spring 的 XML 配置文件调试完成的时候,我已经用 Spring Boot 开发好 N 个功能了。”
这可不是一句玩笑话,相信熟悉 Spring 开发项目的朋友都深有体会,不管你是 Spring 框架的初学者亦或者你是具有经验的开发者,都会多多少少对 Spring 的配置文件感到头痛,尤其是项目日渐庞大之际,纷繁复杂的 XML 配置文件绝对会让你痛苦一段时间。一个项目开发完成后,这种痛苦会消除,但是一旦接手新项目,又会使用 CV 大法去复制粘贴一些十分雷同的 XML 配置文件,周而复始的进行这种枯燥死板的过程甚至会让人不胜其烦,阅读到这里的朋友可以回想一下是否也遭遇过这种无奈的事情。
Spring Boot 的横空出世解决了这种略显尴尬的问题, Spring Boot 通过其框架中大量的自动化配置等方式来简化原 Spring 项目开发过程中编码人员的配置步骤,大部分模块的设置以及类的装载都由 Spring Boot 预先做好,从而使得开发人员不用再复制来复制去的进行 XML 配置,极大的提升了开发人员的工作效率,使得其可以更加的注重业务实现而不是繁杂的配置工作,也因此使得开发者快速的构建应用,这也是为什么总会看到有人会说 “你在配置 XML 的时候我已经开发 N 个功能” 的原因。
Spring Boot 的特性
- 继承了 Spring 的优点
Spring Boot 框架来自于 Spring 大家族,因此 Spring 所有具备的功能和 Spring 框架的优点以及带给开发人员的便利, Spring Boot 框架同样能够提供并且做了大量的封装和优化,使得 Spring Boot 相交于 Spring 框架更容易上手和学习;简单来说,相对于 Spring 来说,完成同样的功能和效果,用户需要操作和编码的工作更少了。
- 可以快速创建独立运行的 Spring 项目,简化开发
Spring Boot 简化了基于 Spring 的应用开发,通过少量的代码就能快速构建一个个独立的、产品级别的 Spring 应用。
官方的 Spring Initializr 方案是一个创建新的 Spring Boot 项目不错的选择,并根据自身业务需求选择和加载可能使用到的依赖,使用官方的初始化方案创建 Spring Boot 项目能够确保你获得经过测试和验证的依赖项,这些依赖项适用于自动配置,能够大大简化项目创建流程,同时,IDEA 和 STS 编辑器也支持这种直接初始化 Spring Boot 项目的方式,一分钟之内就可以完成一个项目的初始化工作,是不是被惊艳到了?
- 习惯优于配置
Spring Boot 遵循习惯优于配置的原则,使用 Spring Boot 我们只需要很少的配置甚至零配置即可完成项目开发,因为大多数大使用 Spring Boot 默认配置即可。
- 大量的自动配置,简化开发
自动进行 Spring 框架的配置,节省程序员大量的时间和精力,能够让程序员专注在业务逻辑代码的编写上,由于自动配置,大量原先需要在 Spring 配置文件中配置项不用去做,但是 Spring Boot 也有自己的配置方式,简洁灵活。
- starters 自动依赖与版本控制
Spring Boot 通过一些 starter 的定义减少开发人员在依赖管理上所花费的时间,在整合各项功能的时候不需要去自行搜索和查找所需依赖并且在 Maven 的 pom 文件中进行定义。 starter 可以简单的理解为“场景启动器”,在不同的场景和功能中引入不同的 starter, 如果需要开发 web 项目,在 pom 文件中导入 spring-boot-starter-web , web 项目开发中所需的依赖都已经维护在 spring-boot-starter-web 中,无需再去导入 servlet 、springmvc 等所需要的 jar 包,项目中如果需要使用 jdbc,在 pom 文件中导入 spring-boot-starter-web 即可,还有其他企业开发中的各种场景,Spring Boot 都已经准备好了,如果没有对应的 starter 也可以自行定义。starter 节选如下:
能够如此方便的进行依赖管理是因为 Spring Boot 在场景启动器的设计中提供了 starter POM,这些 pom 文件的存在导致使用 Spring Boot 开发项目可以非常方便的进行包管理,所需依赖以及依赖 jar 包的关系和版本都由 starter 自行维护,很大程度上减少了自己维护依赖版本所造成的 jar 包冲突或者依赖的版本冲突。
- 使用嵌入式的 Servlet 容器
内嵌 Servlet 容器,Spring Boot 直接嵌入 Tomcat 、 Jetty 或者 Undertow 作为 Servlet 容器 ,降低了对环境的要求,在开发和部署时都无需安装 Tomcat 或者 Jetty 等 Web 容器,调试方便,开发完成后可以将项目打包为 Jar 包,并使用命令行直接启动项目,减去部署环节打包并发布到 Servlet 容器中的过程。
使用嵌入式的 Servlet 容器使得开发调试环节和部署环节的工作量有所减少,同时开发者也可以通过 Spring Boot 配置文件修改内置 Servlet 容器的配置,简单又灵活。
- 对主流框架无配置集成 使用场景全覆盖
Spring Boot 集成的技术栈丰富,各互联网公司使用的技术框架大多可以无配置集成,其他的也可以通过自定义 Spring Boot-starter 进行快速集成,这也代表着 Spring Boot 的应用场景非常广泛,包括常见的 Web 应用、SOA 及目前十分火热的微服务等。在 Web 应用中,Spring Boot 提供了 spring-boot-starter-web 来为 Web 开发予以支持,spring-boot-starter-web 为我们提供了嵌入的 Tomcat 以及 SpringMVC 的依赖, 可以快速构建 MVC 模式的 Web 工程;在 SOA 及微服务中,用 Spring Boot 可以包装每个服务, Spring Cloud 即是一套基于 Spring Boot 实现分布式系统的工具,适用于构建微服务;Spring Boot 提供了 spring-boot-starter-websocket 可以快速实现消息推送,也可以整合流行的 RPC 框架,提供 RPC 服务接口,只要简单地加入对应的 starter 组件即可。
总结
从以上各个特性中可以看出, Spring Boot 正在试图改善目前 Spring 项目开发过程中冗余复杂的弊端:
- 大量的自动配置和 Spring Boot 注解的设计使得开发者在极少的配置甚至零配置的情况下即可完成项目的构建;
- 自动配置与 springboot-starter 机制让开发者在极少的配置和仅仅引入对应的 starter 即可完成项目的构建和相应功能的开发,也使得开发者更加关注于业务逻辑,简化了开发流程;
- 使用嵌入式的 Servlet 容器使得开发者不用过度的关注于 Servlet 容器,快速部署简化部署流程;
- 引入 spring-boot-start-actuator 依赖并进行相应的设置即可获取 SpringBoot 进程的运行期性能参数,让运维人员也体验到 Spring Boot 的魅力。
相信随着不断的深化和学习,大家都能够慢慢了解和使用 Spring Boot ,它的这些优点和特性也会越来越清晰的构建在脑海中。 Spring Boot 这项技术不管是在开源社区亦或者是实际的行业大环境下都处于越来越火热的状态,不管是大中小公司,都在渐渐使用和推广这个技术, Spring Boot 逐渐成为大家普遍需要掌握的开发框架。
Spring Boot 已经成为每一位 Java 开发者在技术道路上打怪升级所必要的技能包。