Spring Boot实战:从0开始动手搭建企业级项目
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.2 选择Spring Boot

2.2.1 Spring Boot的理念

关于Spring Boot框架的理念,可以通过Spring官网探知一二,如图2-4所示。

图2-4 Spring Boot的理念

在该页面中,官方毫不吝啬对于Spring Boot的赞美之词,也极力推荐开发人员使用Spring Boot升级Java项目的代码。同时,也引用了Netflix高级开发工程师的话:“I'm very proud to say, as of early 2019, we've moved our platform almost entirely over to Spring Boot.”其中的含义不言自明。

官方也在不断鼓励开发人员使用Spring Boot,并使用Spring Boot“升级”项目代码进而达到优化Java项目的目的。图2-4已经是改版后的Spring官网,比之前的话术略微有一些收敛。在2018年Spring的官网中,官方对于Spring Boot的描述是“Spring Boot BUILD ANYTHING!”

翻译过来就是“用Spring Boot构造一切!”

彼时的官网如图2-5所示。Spring Boot位于Spring三个重量级产品的第一位,可以看出Spring官方也非常重视Spring Boot的发展。

使用Spring Boot的目的在于用最少的Spring预先配置,让开发人员尽快构建和运行应用,最终创建产品级的Spring应用和服务。

图2-5 2018年Spring官网对于Spring Boot框架的描述文案

2.2.2 Spring Boot可以简化开发

“当你终于把Spring的XML配置文件调试完成的时候,我已经用Spring Boot开发好N个功能了。”

这可不是一句玩笑话,相信熟悉Spring开发项目的读者都深有体会。无论Spring框架的初学者还是具有经验的开发人员,对Spring项目的配置文件多少都会感到头痛,尤其在项目日渐庞大之后,纷繁复杂的XML配置文件让开发人员十分头痛。在一个项目开发完成后,这种痛苦也许会消除,但是一旦接手新项目,又要复制、粘贴一些十分雷同的XML配置文件,周而复始地进行这种枯燥死板的操作让人不胜其烦。

Spring Boot解决了这个问题。Spring Boot通过大量的自动化配置等方式简化了原Spring项目开发过程中编码人员的配置步骤。其中,大部分模块的设置和类的装载都由Spring Boot预先做好,从而使得开发人员不用再重复地进行XML配置,极大地提升了开发人员的工作效率。开发人员可以更加注重业务的实现而不是繁杂的配置工作,从而可以快速地构建应用。

框架的封装和抽象程度的完善,也使得代码的复用性更高、项目的可维护性提高、开发和学习成本降低,能加快开发进度并最终形成行业开发标准。从这个角度来说,越简洁的开发模式就越能减轻开发人员的负担并提升开发效率,行业内普遍认可并接受的框架也会越来越流行,并最终会形成一套读者都认可的开发标准。Spring Boot就正在逐渐改变原有的开发模式,形成行业认可的开发标准。

2.2.3 Spring Boot的特性

1. 继承Spring的优点

Spring Boot来自Spring家族,因此Spring所有具备的功能和优点,Spring Boot同样拥有。官方还对Spring Boot做了大量的封装和优化,从而使开发人员更容易上手和学习。相对于Spring来说,使用Spring Boot完成同样的功能和效果,开发人员需要操作和编码的工作更少了。

2. 可以快速创建独立运行的Spring项目

Spring Boot简化了基于Spring的应用开发,通过少量的代码就能快速构建一个个独立的、产品级别的Spring应用。

Spring Initializr方案是官方提供的创建新Spring Boot项目的不错选择。开发人员使用官方的初始化方案创建Spring Boot项目能够确保获得经过测试和验证的依赖项,这些依赖项适用于自动配置,能够极大简化项目创建流程。同时,IDEA和STS编辑器也支持这种直接初始化Spring Boot项目的方式,使开发人员在一分钟之内就可以完成一个项目的初始化工作。

3. 习惯优于配置

Spring Boot遵循习惯优于配置的原则,在使用Spring Boot后开发人员只需要很少的配置甚至零配置即可完成项目开发,一般使用Spring Boot默认配置即可。

4. 拥有大量的自动配置

自动进行Spring框架的配置,可以节省开发人员大量的时间和精力,能够让开发人员专注在业务逻辑代码的编写上。

5. starter自动依赖与版本控制

Spring Boot通过一些starter的定义可以减少开发人员在依赖管理上所花费的时间。开发人员在整合各项功能的时候,不需要自己搜索和查找所需依赖,但可以在Maven的pom文件中进行定义。starter可以简单理解为“场景启动器”,开发人员可以在不同的场景和功能中引入不同的starter。如果需要开发Web项目,就在pom文件中导入spring-boot-starter-web。在Web项目开发中所需的依赖都已经维护在spring-boot-starter-web中,无须再导入Servlet、Spring MVC等所需要的jar包。项目中如果需要使用JDBC,在pom文件中导入spring-boot-starter-jdbc即可。针对其他企业级开发中遇到的各种场景,Spring Boot都有相关的starter。如果没有对应的starter开发人员也可以自行定义。

使用Spring Boot开发项目可以非常方便地进行包的管理,所需依赖以及依赖jar包的关系和版本都由starter自行维护,在很大程度上减少了维护依赖版本所造成的jar包冲突或者依赖的版本冲突。

Spring Boot官方stater的详细内容可以参考“Spring Boot-starter-*”。

6. 使用嵌入式的Servlet容器

Spring Boot直接嵌入Tomcat、Jetty或者Undertow作为Servlet容器,降低了对环境的要求,在开发和部署时都无须安装相关Web容器,调试方便。在开发完成后可以将项目打包为jar包,并使用命令行直接启动项目,从而简化部署环节打包并发布到Servlet容器中的流程。

使用嵌入式的Servlet容器使得开发调试环节和部署环节的工作量有所减少,同时开发人员也可以通过Spring Boot配置文件修改内置Servlet容器的配置,简单又灵活。

7. 对主流框架无配置集成,使用场景全覆盖

Spring Boot集成的技术栈丰富,不同公司使用的技术框架大部分可以无配置集成,即使不行,也可以通过自定义spring-boot-starter进行快速集成。这就意味着Spring Boot的应用场景非常广泛,包括常见的Web、SOA和微服务等应用。

在Web应用中,Spring Boot提供了spring-boot-starter-web来为Web开发予以支持。spring-boot-starter-web为开发人员提供了嵌入的Tomcat和Spring MVC的依赖,可以快速构建MVC模式的Web工程。在SOA和微服务中,用Spring Boot可以包装每个服务。Spring Cloud即是一套基于Spring Boot实现分布式系统的工具,适用于构建微服务。Spring Boot提供了spring-boot-starter-websocket来快速实现消息推送,同时也可以整合流行的RPC框架,提供RPC服务接口(只要简单加入对应的starter组件即可)。

从以上各个特性可以看出,Spring Boot可以简化Spring项目开发过程中冗余复杂的流程。另外,引入spring-boot-start-actuator依赖并进行相应的设置可获取Spring Boot进程的运行期性能参数,让运维人员也能体验到Spring Boot的魅力。