1.2 初始化Spring 应用程序
1.2 初始化Spring 应用程序
在本书的学习过程中,将创建
初始化
- 从
Web 应用程序 http://start.spring.io 创建 - 使用
curl
命令从命令行创建 - 使用
Spring Boot 命令行接口从命令行创建 - 使用
Spring Tool Suite 创建一个新项目的时候 - 使用
IntelliJ IDEA 创建一个新项目的时候 - 使用
NetBean 创建一个新项目的时候
我没有在本章中花费数页来讨论这些选项中的每一个,而是在附录中收集了这些详细信息。在本章以及整本书中,将展示如何使用
顾名思义,
如果你不是
1.2.1 使用Spring Tool Suite 初始化Spring 项目
要开始使用
图
一旦选择了
图
向导的下一页使您可以选择要添加到项目中的依赖项(请参见图
至于依赖项本身,您可以展开各个部分并手动查找所需的依赖项,或者在 “可用” 列表顶部的搜索框中搜索它们。对于
图
此时,可以单击完成以生成项目并将其添加到工作区。但是,如果感到有点危险,请再次单击 “下一步”,以查看新的
图
默认情况下,新项目向导在 http://start.spring.io 上调用
单击完成后,将从
1.2.2 检查Spring 项目结构
在
图
你可能会认为这是典型的
mvnw
和mvnw.cmd
—— 这些是Maven 包装器脚本。即使你的计算机上没有安装Maven ,也可以使用这些脚本构建项目。pom.xml
—— 这是Maven 构建规范,一会儿我们将对此进行更深入的研究。TacoCloudApplication.java
—— 这是引导项目的Spring Boot 主类。稍后,我们将在这节详细介绍。application.properties
—— 该文件最初为空,但提供了一个可以指定配置属性的地方。我们将在本章中对此文件进行一些修改,但在第5 章中将详细介绍配置属性。static
—— 在此文件夹中,可以放置要提供给浏览器的任何静态内容(图像、样式表、JavaScript 等) ,最初为空。templates
—— 在此文件夹中,放置用于向浏览器呈现内容的模板文件。最初为空,但很快会添加Thymeleaf 模板。TacoCloudApplicationTests.java
—— 这是一个简单的测试类,可确保成功加载Spring 应用程序上下文。开发应用程序时,将添加更多的测试。
随着
探索构建规范
填写
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>sia</groupId>
<artifactId>taco-cloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>taco-cloud</name>
<description>Taco Cloud Example</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>htmlunit-driver</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
<packaging>
元素。你选择将应用程序构建为可执行的
选择
如果打算将应用程序部署到传统的
接下来,请注意 <parent>
元素,更具体地说,注意它的 <version>
子元素。这指定您的项目将 spring-boot-starter-parent
作为它的父2.0.4.RELEASE
版本,表示你正在使用
在讨论依赖项时,请注意在 <dependencies>
元素下声明了三个依赖项。前两个看起来应该比较熟悉。它们直接对应于在单击
你可能还会注意到,所有这三个依赖项的
- 构建的文件将会小得多,也更容易管理,因为不需要对每一个可能需要的库都声明一个依赖项。
- 可以根据它们提供的功能来考虑需要的依赖关系,而不是根据库名来考虑。如果正在开发一个
web 应用程序,那么将添加web starter 依赖项,而不是一个编写web 应用程序的各个库的清单。 - 不用担心
library 版本问题。可以相信的是,对于给定版本的Spring Boot ,可间接地引入的库的版本将是兼容的,只需要考虑使用的是哪个版本的Spring Boot 。
最后,构建规范以
-
提供了一个
Maven 编译目标,让你能够使用Maven 运行应用程序。这将在第1.3.4 节中尝试实现这个目标。 -
确保所有的依赖库都包含在可执行的
JAR 文件中,并且在运行时类路径中可用。 -
在
JAR 文件中生成一个manifest 文件,表示引导类(在本书例子中是TacoCloudApplication
)是可执行JAR 的主类。
说到引导类,让我们打开它,仔细看看。
引导应用程序
因为将从一个可执行的TacoCloudApplication
类中找到的内容,如下面的清单所示。
package tacos;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class TacoCloudApplication {
public static void main(String[] args) {
SpringApplication.run(TacoCloudApplication.class, args);
}
}
虽然 TacoCloudApplication
中只有很少的代码,但是其中包含了相当丰富的内容。最强大的代码行之一也是最短的代码行之一。@SpringBootApplication
注释清楚地表明这是一个@SpringBootApplication
中有更多的东西。@SpringBootApplication
是一个组合了其他三个注释的复合应用程序:
@SpringBootConfiguration
—— 指定这个类为配置类。尽管这个类中还没有太多配置,但是如果需要,可以将Javabased Spring Framework 配置添加到这个类中。实际上,这个注释是@Configuration
注释的一种特殊形式。@EnableAutoConfiguration
—— 启用Spring 自动配置。稍后我们将详细讨论自动配置。现在,要知道这个注释告诉Spring Boot 自动配置它认为需要的任何组件。@ComponentScan
—— 启用组件扫描。这允许你声明其他带有@Component
、@Controller
、@Service
等注释的类,以便让Spring 自动发现它们并将它们注册为Spring 应用程序上下文中的组件。
TacoCloudApplication
的另一个重要部分是 main()
方法。这个方法将在执行
main()
方法调用run()
方法,该方法执行应用程序的实际引导,创建Spring
应用程序上下文。传递给 run()
方法的两个参数是一个配置类和命令行参数。虽然传递给 run()
的配置类不必与引导类相同,但这是最方便、最典型的选择。
你可能不需要更改引导类中的任何内容。对于简单的应用程序,你可能会发现在引导类中配置一两个其他组件很方便,但是对于大多数应用程序,最好为任何没有自动配置的东西创建一个单独的配置类。你将在本书的整个过程中定义几个配置类,因此请注意这些细节。
测试应用程序
测试是软件开发的一个重要部分。认识到这一点后,
package tacos;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class TacoCloudApplicationTests {
@Test
public void contextLoads() {
}
}
在 TacoCloudApplicationTests
中没有太多东西:类中的一个测试方法是空的。尽管如此,这个测试类确实执行了必要的检查,以确保
还要注意用 @RunWith(SpringRunner.class)
注释的类。@RunWith
是一个
其他名字的测试运行器
如果你已经熟悉编写SpringJUnit4ClassRunner
的测试运行器。SpringRunner
是 SpringJUnit4ClassRunner
的别名,它是在
@SpringBootTest
告诉main()
方法中调用 SpringApplication.run()
的测试类就足够了。在本书的过程中,将多次看到 @SpringBootTest
,我们将揭示它的一些功能。
最后,还有测试方法本身。尽管 @RunWith(SpringRunner.class)
和 @SpringBootTest
的任务是加载用于测试的
至此,我们已经完成了对