> For the complete documentation index, see [llms.txt](https://potoyang.gitbook.io/spring-in-action-v5/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://potoyang.gitbook.io/spring-in-action-v5/di-1-zhang-spring-ru-men/1.3-bian-xie-spring-ying-yong-cheng-xu/1.3.6-hui-gu.md).

# 1.3.6 回顾

回想一下是如何走到这一步的。简而言之，以下是构建基于 Spring 的 Taco Cloud 应用程序的步骤：

* 使用 Spring Initializr 创建了一个初始项目结构。
* 写了一个控制器类来处理主页请求。
* 定义了一个视图模板来呈现主页。
* 写了一个简单的测试类来检验上诉工作。

看起来很简单，不是吗？除了启动项目的第一步之外，所采取的每一个行动都是为了实现创建主页的目标。

事实上，编写的几乎每一行代码都是针对这个目标的。不计算 Java `import` 语句，只计算控制器类中的两行代码，而视图模板中没有 Spring 的特定代码。尽管测试类的大部分都使用了 Spring 的测试支持，但是在测试上下文中，它的侵入性似乎要小一些。

这是使用 Spring 开发的一个重要好处。可以关注于满足应用程序需求的代码，而不是满足框架的需求。尽管确实需要不时地编写一些特定于框架的代码，但这通常只是代码库的一小部分。如前所述，Spring （通过 Spring Boot）可以被认为是 *无框架的框架*。

这到底是怎么回事？Spring 在幕后做了什么来确保您的应用程序需求得到满足？为了理解 Spring 在做什么，让我们从构建规范开始。

在 pom.xml 文件中，声明了对 Web 和 Thymeleaf 启动器的依赖。这两个依赖关系带来了一些其他的依赖关系，包括：

* Spring MVC 框架
* 嵌入式 Tomcat
* Thymeleaf 和 Thymeleaf 布局方言

它还带来了 Spring Boot 的自动配置库。当应用程序启动时，Spring Boot 自动配置自动检测这些库并自动执行：

* 在 Spring 应用程序上下文中配置 bean 以启用 Spring MVC
* 将嵌入式 Tomcat 服务器配置在 Spring 应用程序上下文中
* 为使用 Thymeleaf 模板呈现 Spring MV C视图，配置了一个 Thymeleaf 视图解析器

简而言之，自动配置完成了所有繁重的工作，让你专注于编写实现应用程序功能的代码。如果你问我这样好不好，我会说这是一个很好的安排！

你的 Spring 之旅才刚刚开始。Taco Cloud 应用程序只涉及 Spring 提供的一小部分内容。在你开始下一步之前，让我们来俯瞰 Spring 的风景线，看看你在旅途中会遇到什么地标。
