11.1 創(chuàng)建POM
我們需要通過創(chuàng)建一個Maven的pom.xml文件開始。它是一個用來構(gòu)建項目的秘方。打開你喜歡的編輯器,并添加如下內(nèi)容:
<?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>com.example</groupId>
<artifactId>myproject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<!-- Additional lines to be added here... -->
</project>
上述的列表能夠讓你有一個可行的構(gòu)建。你可以通過運(yùn)行mvn package(目前,你可以無視“jar will be empty - no content was marked for inclusion!”的警告)
在這節(jié),你可以導(dǎo)入項目到IDE中(大部分現(xiàn)代的Java IDE都內(nèi)置了對Maven的支持)
11.2 添加依賴
Spring Boot提供了一系列的Starters使你能添加jar包到classpath中。我們的應(yīng)用已經(jīng)在POM中的parent節(jié)點使用了spring-boot-starter-parent。它是一個特殊的starter,能夠提供有用的Maven默認(rèn)值。它同時也提供依賴管理,你就可以省略依賴的versions標(biāo)簽。
其他的Starters提供你在開發(fā)特殊種類應(yīng)用所需的依賴。因為我們開發(fā)的是一個網(wǎng)頁應(yīng)用,所以添加了spring-boot-starter-web這個依賴。在此之前,我們可以通過運(yùn)行以下的命令來查看目前的項目依賴
$ mvn dependency:tree
[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT
命令mvn dependency:tree打印了一個樹形的項目依賴。你可以看到spring-boot-web-starter它自身并不提供依賴。為了添加所需的依賴,編輯你的pom.xml并立即在parent節(jié)下面添加以下的依賴spring-boot-starter-web
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
如果你再次運(yùn)行mvn dependency:tree的話,你可以看到一系列額外的依賴,包括Tomcat web服務(wù)器和Spring Boot
11.3 編寫代碼
為了完成我們的程序,我們需要創(chuàng)建一個Java文件。Maven默認(rèn)從src/main/java中編譯資源,所以你需要創(chuàng)建那樣的文件目錄結(jié)構(gòu)然后添加一個名為src/main/java/Example.java的文件并包含以下代碼:
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.bind.annotion.*;
@RestController
@EnableAutoConfiguration
public class Example{
@RequestMapping("/")
String home(){
return "Hello World";
}
public static void main(String[] args) throws Exception{
SpringApplication.run(Example.class,args)
}
}
雖然這里沒有很多的代碼,但卻發(fā)生很多我們看不到的事情,我們在不知不覺中經(jīng)歷了下一些節(jié)章節(jié)中重要的部分。
11.3.1 @RestController和@RequestMapping 注解
在我們的Example類中第一個注解就是@RestController.我們都知道它是一個固定的注解。它為閱讀代碼的人提供了暗示,對Spring來說這個類扮演了重要的角色。在這個例子中,我們的類是一個web @Controller ,所以在處理發(fā)起的web請求時,Spring就解析它們。
@ReqeustMapping注解提供了路由信息。它告訴Spring任何/路徑的HTTP請求都應(yīng)該被映射到home方法中。@RestController注解則告知Spring將字符串結(jié)果直接返回給請求者。
@RestController和@RequestMapping注解都是Spring MVC注解(它們并不是Spring Boot特有的)。詳細(xì)信息請閱讀MVC section中的Spring參考文檔。
11.3.2 @EnableAutoConfiguration注解
第二個類級的注解就是@EnableAutoConfiguration。這個注解告知Spring Boot去“猜測”你想怎樣配置Spring,基于你添加的jar依賴。由于spring-boot-starter-web添加了Tomcat和Spring MVC,自動配置則根據(jù)它假設(shè)你正在開發(fā)一個web程序
Starters和Auto-Configuration
自動配置是設(shè)計來搭配Starters更好工作的,但這兩個概念并不是直接捆綁在一起的。你可以隨心選擇starters以外的jar依賴。Spring Boot照樣能很好地自動配置你的應(yīng)用。
11.3.3 main方法
關(guān)于我們應(yīng)用的最后一部分是main方法,這就是應(yīng)用入口的一個標(biāo)準(zhǔn)方法,它遵循Java的慣例。我們通過調(diào)用run將main方法委托給了SpringApplication類。SpringApplication啟動我們的應(yīng)用,開啟Spring,相應(yīng)地啟動自動配置好的Tomcat web服務(wù)器。我們需要將Example.class作為一個參數(shù)傳給run方法以告知SpringApplication哪個是基本的Spirng組件。通過args數(shù)組暴露任何的命令行參數(shù)。