最近一直在学习 Spring Boot 的内容,Spring 官网 上的入门教程(Getting Started Guides)看了很多篇,但却越看越迷茫。从最基础的输出 "Hello World" ,到后面的创建和处理 RESTful web 服务,连接数据库,总感觉什么地方不太对。对比之前学习 Python 失败的经验来看,大概就是对框架不熟悉、对造轮子过程无法完全理解导致的。

问过之前的 Java 同事,Spring 和 Spring Boot 有什么区别和联系,得到的回答是一样的,只不过 Spring Boot 配置少一点等。当时并不能很好的理解这话的含义,现在终于有了些自己的体会。

如果做类比的话,可以说 Java 的框架丰富程度是比不过 PHP 的。因为我接触过的 PHP 框架就有 5 个:thinkphp、Codeigniter、Yii2、Laravel、Yaf,而且各有各的特色和侧重点。CI(Codeigniter)是入门级的一类框架,只需要你掌握简单的 MVC 架构只是就能轻松上手使用;TP(thinkphp) 也是相对简单一点的,但现在 tp 有了向 Yii2 和 Laravel 靠拢的趋势,很多发布的新特性都与后两者雷同。Yii2 和 Laravel 具有相对比较丰富和完整的体系架构,框架复杂度也增加很多,入门相对困难一些。Yaf 是我听说一大牛开发的框架,主要的框架内容以 PHP 扩展的形式存在,安装好扩展后,自建代码近乎于直接调用 PHP 系统 API 运行,执行效率大大提升。

一般情况下,PHP 应用都会有一个入口文件,里面调用 PHP 框架初始化脚本。整个生命周期里会做很多工作,包括路由转发、参数过滤、匹配控制器方法、引入模型和(或)视图(或中间件)、返回处理后的数据等。如果使用 composer 进行项目的三方包管理,则会调用 composer 的初始化脚本。然后框架本身也会作为三方库的一部分,进行统一管理。composer 会根据 composer.json 定义内容引入对应版本的依赖库。所以如果把 Spring 、Spring Boot 和 Maven 跟 PHP 的一套内容进行对比,就能够很好的理解 Spring 、Spring Boot 和 Maven 的工作机制。

语言基础框架整合框架库管理器
PHPLaravel FrameworkLaravelcomposer
JAVASpring FrameworkSpring Bootmaven

从 Spring Boot 项目概述中也可以得出结论:

Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run".

We take an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need minimal Spring configuration.

译文:

Spring Boot 很容易创建独立、生产级别且基于 Spring 的应用,你可以直接运行它。

我们对 Spring 平台和三方库有很固执的想法,你只需要做很少的琐事就可以开始。大多数 Spring Boot 应用需要很少的 Spring 配置。

所以,Spring Boot 是在 Spring 框架的基础上做了一个整合,要学 Spring Boot,先学 Spring。