返回介绍

2.1.1 查看初始化的 Spring Boot 新项目

发布于 2025-04-21 21:10:06 字数 5489 浏览 0 评论 0 收藏

图 2-2 中值得注意的第一件事是,整个项目结构遵循传统 Maven 或 Gradle 项目的布局,即主要应用程序代码位于 src/main/java 目录里,资源都在 src/main/resources 目录里,测试代码则在 src/test/java 目录里。此刻还没有测试资源,但如果有的话,要放在 src/test/resources 里。

再进一步,你会看到项目里还有不少文件。

  • build.gradle:Gradle 构建说明文件。

  • ReadingListApplication.java :应用程序的启动引导类(bootstrap class),也是主要的 Spring 配置类。

  • application.properties :用于配置应用程序和 Spring Boot 的属性。

  • ReadingListApplicationTests.java :一个基本的集成测试类。

因为构建说明文件里有很多 Spring Boot 的优点尚未揭秘,所以我打算把最好的留到最后,先让我们来看看 ReadingListApplication.java

1. 启动引导 Spring

ReadingListApplication 在 Spring Boot 应用程序里有两个作用:配置和启动引导。首先,这是主要的 Spring 配置类。虽然 Spring Boot 的自动配置免除了很多 Spring 配置,但你还需要进行少量配置来启用自动配置。正如代码清单 2-1 所示,这里只有一行配置代码。

代码清单 2-1 ReadingListApplication.java 不仅是启动引导类,还是配置类

package readinglist;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication          ←---开启组件扫描和自动配置
public class ReadingListApplication {

  public static void main(String[] args) {
    SpringApplication.run(ReadingListApplication.class, args);    ←---负责启动引导应用程序
  }

}

@SpringBootApplication 开启了 Spring 的组件扫描和 Spring Boot 的自动配置功能。实际上, @SpringBootApplication 将三个有用的注解组合在了一起。

  • Spring 的 @Configuration :标明该类使用 Spring 基于 Java 的配置。虽然本书不会写太多配置,但我们会更倾向于使用基于 Java 而不是 XML 的配置。

  • Spring 的 @ComponentScan :启用组件扫描,这样你写的 Web 控制器类和其他组件才能被自动发现并注册为 Spring 应用程序上下文里的 Bean。本章稍后会写一个简单的 Spring MVC 控制器,使用 @Controller 进行注解,这样组件扫描才能找到它。

  • Spring Boot 的 @EnableAutoConfiguration :这个不起眼的小注解也可以称为 @Abracadabra 2 ,就是这一行配置开启了 Spring Boot 自动配置的魔力,让你不用再写成篇的配置了。

2 abracadabra 的意思是咒语。 - 译者注

在 Spring Boot 的早期版本中,你需要在 ReadingListApplication 类上同时标上这三个注解,但从 Spring Boot 1.2.0 开始,有 @SpringBootApplication 就行了。

如我所说, ReadingListApplication 还是一个启动引导类。要运行 Spring Boot 应用程序有几种方式,其中包含传统的 WAR 文件部署。但这里的 main() 方法让你可以在命令行里把该应用程序当作一个可执行 JAR 文件来运行。这里向 SpringApplication.run() 传递了一个 ReadingListApplication 类的引用,还有命令行参数,通过这些东西启动应用程序。

实际上,就算一行代码也没写,此时你仍然可以构建应用程序尝尝鲜。要构建并运行应用程序,最简单的方法就是用 Gradle 的 bootRun 任务:

$ gradle bootRun

bootRun 任务来自 Spring Boot 的 Gradle 插件,我们会在 2.1.2 节里详细讨论。此外,你也可以用 Gradle 构建项目,然后在命令行里用 java 来运行它:

$ gradle build
...
$ java -jar build/libs/readinglist-0.0.1-SNAPSHOT.jar

应用程序应该能正常运行,启动一个监听 8080 端口的 Tomcat 服务器。要是愿意,你可以用浏览器访问 http://localhost:8080 ,但由于还没写控制器类,你只会收到一个 HTTP 404(NOT FOUND)错误,看到错误页面。在本章结束前,这个 URL 将会提供一个阅读列表应用程序。

你几乎不需要修改 ReadingListApplication.java 。如果你的应用程序需要 Spring Boot 自动配置以外的其他 Spring 配置,一般来说,最好把它写到一个单独的 @Configuration 标注的类里。(组件扫描会发现并使用这些类的。)极度简单的情况下,可以把自定义配置加入 ReadingListApplication.java

2. 测试 Spring Boot 应用程序

Initializr 还提供了一个测试类的骨架,可以基于它为你的应用程序编写测试。但 ReadingListApplicationTests (代码清单 2-2)不止是个用于测试的占位符,它还是一个例子,告诉你如何为 Spring Boot 应用程序编写测试。

代码清单 2-2 @SpringApplicationConfiguration 加载 Spring 应用程序上下文

package readinglist;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;

import readinglist.ReadingListApplication;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(
         classes = ReadingListApplication.class)    ←---通过 Spring Boot 加载上下文
@WebAppConfiguration

public class ReadingListApplicationTests {

  @Test
  public void contextLoads() {     ←---测试加载的上下文
  }

}

一个典型的 Spring 集成测试会用 @ContextConfiguration 注解标识如何加载 Spring 的应用程序上下文。但是,为了充分发挥 Spring Boot 的魔力,这里应该用 @SpringApplicationConfiguration 注解。正如你在代码清单 2-2 里看到的那样, ReadingListApplicationTests 使用 @SpringApplicationConfiguration 注解从 ReadingListApplication 配置类里加载 Spring 应用程序上下文。

ReadingListApplicationTests 里还有一个简单的测试方法,即 contextLoads() 。实际上它就是个空方法。但这个空方法足以证明应用程序上下文的加载没有问题。如果 ReadingListApplication 里定义的配置是好的,就能通过测试。如果有问题,测试就会失败。

当然,现在这只是一个新的应用程序,你还会添加自己的测试。但 contextLoads() 方法是个良好的开端,此刻可以验证应用程序提供的各种功能。第 4 章会更详细地讨论如何测试 Spring Boot 应用程序。

3. 配置应用程序属性

Initializr 为你生成的 application.properties 文件是一个空文件。实际上,这个文件完全是可选的,你大可以删掉它,这不会对应用程序有任何影响,但留着也没什么问题。

稍后,我们肯定有机会向 application.properties 里添加几个条目。但现在,如果你想小试牛刀,可以加一行看看:

server.port=8000

加上这一行,嵌入式 Tomcat 的监听端口就变成了 8000,而不是默认的 8080。你可以重新运行应用程序,看看是不是这样。

这说明 application.properties 文件可以很方便地帮你细粒度地调整 Spring Boot 的自动配置。你还可以用它来指定应用程序代码所需的配置项。在第 3 章里我们会看到好几个例子,演示 application.properties 的这两种用法。

要注意的是,你完全不用告诉 Spring Boot 为你加载 application.properties ,只要它存在就会被加载,Spring 和应用程序代码都能获取其中的属性。

我们差不多已经把初始化的项目介绍完了,还剩最后一样东西,让我们来看看 Spring Boot 应用程序是如何构建的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。