mvnw
和 mvnw.cmd
—— 这些是 Maven 包装器脚本。即使你的计算机上没有安装 Maven,也可以使用这些脚本构建项目。pom.xml
—— 这是 Maven 构建规范,一会儿我们将对此进行更深入的研究。TacoCloudApplication.java
—— 这是引导项目的 Spring Boot 主类。稍后,我们将在这节详细介绍。application.properties
—— 该文件最初为空,但提供了一个可以指定配置属性的地方。我们将在本章中对此文件进行一些修改,但在第 5 章中将详细介绍配置属性。static
—— 在此文件夹中,可以放置要提供给浏览器的任何静态内容(图像、样式表、JavaScript 等),最初为空。templates
—— 在此文件夹中,放置用于向浏览器呈现内容的模板文件。最初为空,但很快会添加 Thymeleaf 模板。TacoCloudApplicationTests.java
—— 这是一个简单的测试类,可确保成功加载 Spring 应用程序上下文。开发应用程序时,将添加更多的测试。<packaging>
元素。你选择将应用程序构建为可执行的 JAR 文件,而不是 WAR 文件。这可能是你所做的最奇怪的选择之一,特别是对于 web 应用程序。毕竟,传统的 Java web 应用程序被打包为 WAR 文件,而 JAR 文件是库和偶尔使用的桌面 UI 应用程序的首选打包方式。<parent>
元素,更具体地说,注意它的 <version>
子元素。这指定您的项目将 spring-boot-starter-parent
作为它的父 POM。除此之外,这个父 POM 还为 Spring 项目中常用的几个库提供依赖项管理。对于父 POM 覆盖的那些库,不必指定版本,因为它是从父 POM 继承的。2.0.4.RELEASE
版本,表示你正在使用 Spring Boot 2.0.4,这样项目将使用继承自 Spring Boot 版本中定义的依赖项管理。<dependencies>
元素下声明了三个依赖项。前两个看起来应该比较熟悉。它们直接对应于在单击 Spring Tool Suite 新建项目向导中的 Finish 按钮之前选择的 Web 和 Thymeleaf 依赖项。第三个依赖项提供了许多有用的测试功能,你不必选中包含它的方框,因为 Spring Initializr 假定(希望是正确的)你将编写测试。TacoCloudApplication
)是可执行 JAR 的主类。TacoCloudApplication
类中找到的内容,如下程序清单 1.2 所示。TacoCloudApplication
中只有很少的代码,但是其中包含了相当丰富的内容。最强大的代码行之一也是最短的代码行之一。@SpringBootApplication
注释清楚地表明这是一个 Spring 引导应用程序。但是 @SpringBootApplication
中有更多的东西。@SpringBootApplication
是一个组合了其他三个注释的复合应用程序:@SpringBootConfiguration
—— 指定这个类为配置类。尽管这个类中还没有太多配置,但是如果需要,可以将 Javabased Spring Framework 配置添加到这个类中。实际上,这个注释是@Configuration
注释的一种特殊形式。@EnableAutoConfiguration
—— 启用 Spring 自动配置。稍后我们将详细讨论自动配置。现在,要知道这个注释告诉 Spring Boot 自动配置它认为需要的任何组件。@ComponentScan
—— 启用组件扫描。这允许你声明其他带有 @Component
、@Controller
、@Service
等注释的类,以便让 Spring 自动发现它们并将它们注册为 Spring 应用程序上下文中的组件。TacoCloudApplication
的另一个重要部分是 main()
方法。这个方法将在执行 JAR 文件时运行。在大多数情况下,这种方法是样板代码;编写的每个 Spring 引导应用程序都有一个类似或相同的方法(尽管类名不同)。main()
方法调用 SpringApplication 类上的静态 run()
方法,该方法执行应用程序的实际引导,创建Spring
应用程序上下文。传递给 run()
方法的两个参数是一个配置类和命令行参数。虽然传递给 run()
的配置类不必与引导类相同,但这是最方便、最典型的选择。TacoCloudApplicationTests
中没有太多东西:类中的一个测试方法是空的。尽管如此,这个测试类确实执行了必要的检查,以确保 Spring 应用程序上下文能够成功加载。如果做了任何阻止创建 Spring 应用程序上下文的更改,则此测试将失败,这样你就可以通过解决问题来应对。@RunWith(SpringRunner.class)
注释的类。@RunWith
是一个 JUnit 注释,提供了一个测试运行器来引导 JUnit 运行测试用例。请将清单 1.3 看作是对它的基准应用程序测试,即将插件应用到 JUnit 以提供自定义测试行为。在本例中,JUnit 被赋予了 SpringRunner,这是一个由 Spring 提供的测试运行程序,它提供了创建一个 Spring 应用程序上下文的功能,以供测试运行。SpringJUnit4ClassRunner
的测试运行器。SpringRunner
是 SpringJUnit4ClassRunner
的别名,它是在 Spring 4.3 中引入的,用于删除与特定版本的 JUnit (例如,JUnit4)的关联。毫无疑问,别名更易于阅读和输入。@SpringBootTest
告诉 JUnit 使用 Spring 引导功能引导测试。现在,把它看作是在 main()
方法中调用 SpringApplication.run()
的测试类就足够了。在本书的过程中,将多次看到 @SpringBootTest
,我们将揭示它的一些功能。@RunWith(SpringRunner.class)
和 @SpringBootTest
的任务是加载用于测试的 Spring 应用程序上下文,但是如果没有任何测试方法,它们将没有任何事情要做。即使没有任何断言或任何类型的代码,这个空的测试方法也会调用两个注释完成它们的工作,并加载 Spring 应用程序上下文。如果运行过程中有任何问题,测试就会失败。