一起學(xué)JAVA之《spring boot》02-開發(fā)您的第一個(gè)Spring Boot應(yīng)用程序

一适揉、導(dǎo)航

本節(jié)內(nèi)容簡(jiǎn)介:
1. 開發(fā)之前環(huán)境檢查
2. 創(chuàng)建pom.xml并導(dǎo)入依賴
3. 編寫代碼
4. 代碼解釋
5. 運(yùn)行代碼
6. 創(chuàng)建可執(zhí)行的jar

二螟左、開發(fā)之前環(huán)境檢查

讓我們?cè)贘ava中開發(fā)一個(gè)簡(jiǎn)單的 Hello World 的Web應(yīng)用程序欢揖,來(lái)介紹Spring Boot一些主要的功能营罢。
這里將使用Maven構(gòu)建該項(xiàng)目翼虫。

在開始之前毁涉,打開終端(windwos cmd)來(lái)驗(yàn)證java版本和maven版本

C:\Users\SEELE>java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)



這里要注意檢查maven版本不是maven -v,而是mvn -v

C:\Users\SEELE>mvn -v
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1...

三沉帮、創(chuàng)建pom.xml并導(dǎo)入依賴

  1. 使用idea創(chuàng)建一個(gè)maven項(xiàng)目,并添加maven 父類依賴
<?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.likeoak</groupId>
    <artifactId>springboot</artifactId>
    <version>1.0.0</version>

    <!--添加父類依賴-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
    </parent>

</project>
  1. 添加web依賴

 <!--web依賴-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

四贫堰、編寫代碼

默認(rèn)情況下穆壕,Maven將從src/main/java編譯源代碼,因此您需要?jiǎng)?chuàng)建該文件夾結(jié)構(gòu)其屏,然后添加一個(gè)名為src/main/java/Example.java的文件:
注意:官方建議不要使用默認(rèn)的default包來(lái)創(chuàng)建啟動(dòng)類喇勋,這樣會(huì)導(dǎo)致所有的包都會(huì)被掃描,包括jar


package com.likeoak;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * The type Spring boot example.
 */
RestController
EnableAutoConfiguration
public class SpringBootExample {

    @RequestMapping("/")
    String home() {
        return "Hello World!";
    }
    public static void main(String[] args) throws Exception {
        SpringApplication.run(SpringBootExample.class, args);
    }


}

五偎行、代碼解釋

盡管以上代碼不多川背,但是卻發(fā)生很多事情,讓我們一步一步來(lái)解釋吧

1. 注解解釋
上面一共用了三個(gè)注解 @RestController ,@RequestMapping, @EnableAutoConfiguration

@RestController是一個(gè)被稱為構(gòu)造性(stereotype)的注解蛤袒,它表示的意思是是一個(gè)REST風(fēng)格的Controller
@RequestMapping 這個(gè)注解是提供路由信息渗常,所有HTTP的 "/"這個(gè)請(qǐng)求都會(huì)被這個(gè)home方法捕獲,這個(gè)和@RestController一起的意思是汗盘,當(dāng)訪問(wèn)"/"這個(gè)路徑的時(shí)候皱碘,就以字符串的形式返回"Hello World!"

@EnableAutoConfiguration 這個(gè)注解的意思是告訴spring boot 根據(jù)你配置的jar來(lái)猜測(cè)你想如何配置spring
這里我們配置了spring-boot-starter-web這個(gè)jar,spring boot 就會(huì)為我們自動(dòng)配置tomcat和SprngMVC的相關(guān)配置
,可以參考下面spring-boot-starter-web依賴包,看到里面有springMVC和tomcat的引用

附spring-boot-starter-web依賴包

<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starters</artifactId>
        <version>1.5.2.RELEASE</version>
    </parent>
    <artifactId>spring-boot-starter-web</artifactId>
    <name>Spring Boot Web Starter</name>
    <description>Starter for building web, including RESTful, applications using Spring
        MVC. Uses Tomcat as the default embedded container</description>
    <url>http://projects.spring.io/spring-boot/</url>
    <organization>
        <name>Pivotal Software, Inc.</name>
        <url>http://www.spring.io</url>
    </organization>
    <properties>
        <main.basedir>${basedir}/../..</main.basedir>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
        </dependency>
    </dependencies>
</project>

附spring-boot-starter-tomcat依賴

<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starters</artifactId>
        <version>1.5.2.RELEASE</version>
    </parent>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <name>Spring Boot Tomcat Starter</name>
    <description>Starter for using Tomcat as the embedded servlet container. Default
        servlet container starter used by spring-boot-starter-web</description>
    <url>http://projects.spring.io/spring-boot/</url>
    <organization>
        <name>Pivotal Software, Inc.</name>
        <url>http://www.spring.io</url>
    </organization>
    <properties>
        <main.basedir>${basedir}/../..</main.basedir>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-el</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-websocket</artifactId>
        </dependency>
    </dependencies>
</project>

2. main方法
main方法是一個(gè)java標(biāo)準(zhǔn)入口方法。這里main方法通過(guò)調(diào)用runm,將業(yè)務(wù)委托給了 Spring Boot的 SpringApplication 類隐孽。SpringApplication將引導(dǎo)我們啟動(dòng)spring,相應(yīng)的啟動(dòng)被自動(dòng)配置的tomcat web服務(wù)器癌椿,這里我們需要將主類 SpringBootExample作為參數(shù)傳給run方法,告訴spring boot 那個(gè)是主類菱阵,并傳遞args參數(shù)給 spring boot,對(duì)于這個(gè)args參數(shù)踢俄,我們后續(xù)會(huì)講解.

六、運(yùn)行代碼

直接運(yùn)行main方法

運(yùn)行結(jié)果:

                     .__  .__ __                       __
__  _  ____  _  ____  _  __  |  | |__|  | __ ____  _________  |  | __     ____  ____   _____
\ \/ \/ /\ \/ \/ /\ \/ \/ /  |  | |  |  |/ // __ \/  _ \__  \ |  |/ /   _/ ___\/  _ \ /     \
 \     /  \     /  \     /   |  |_|  |    <\  ___(  <_> ) __ \|    <    \  \__(  <_> )  Y Y  \
  \/\_/    \/\_/    \/\_/ /\ |____/__|__|_ \\___  >____(____  /__|_ \ /\ \___  >____/|__|_|  /
                          \/              \/    \/          \/     \/ \/     \/            \/
2017-06-25 18:58:59.061  INFO 10640 --- [           main] com.likeoak.SpringBootExample            : Starting SpringBootExample on SEELE-PC with PID 10640 (G:\Mybook\springBoot\target\classes started by SEELE in G:\Mybook\springBoot)
2017-06-25 18:58:59.065  INFO 10640 --- [           main] com.likeoak.SpringBootExample            : No active profile set, falling back to default profiles: default
2017-06-25 18:58:59.107  INFO 10640 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@6b8ca3c8: startup date [Sun Jun 25 18:58:59 CST 2017]; root of context hierarchy
2017-06-25 18:59:00.581  INFO 10640 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2017-06-25 18:59:00.597  INFO 10640 --- [           main] o.apache.catalina.core.StandardService   : Starting service Tomcat
2017-06-25 18:59:00.598  INFO 10640 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.11
2017-06-25 18:59:00.748  INFO 10640 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2017-06-25 18:59:00.748  INFO 10640 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1645 ms
2017-06-25 18:59:00.900  INFO 10640 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: 'dispatcherServlet' to [/]
2017-06-25 18:59:00.904  INFO 10640 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2017-06-25 18:59:00.905  INFO 10640 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2017-06-25 18:59:00.905  INFO 10640 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2017-06-25 18:59:00.906  INFO 10640 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2017-06-25 18:59:01.247  INFO 10640 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@6b8ca3c8: startup date [Sun Jun 25 18:58:59 CST 2017]; root of context hierarchy
2017-06-25 18:59:01.337  INFO 10640 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/]}" onto java.lang.String com.likeoak.SpringBootExample.home()
2017-06-25 18:59:01.342  INFO 10640 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2017-06-25 18:59:01.342  INFO 10640 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2017-06-25 18:59:01.376  INFO 10640 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-06-25 18:59:01.376  INFO 10640 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-06-25 18:59:01.452  INFO 10640 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-06-25 18:59:01.669  INFO 10640 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2017-06-25 18:59:01.760  INFO 10640 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2017-06-25 18:59:01.764  INFO 10640 --- [           main] com.likeoak.SpringBootExample            : Started SpringBootExample in 3.182 seconds (JVM running for 3.816)

然后訪問(wèn) http://localhost:8080/
結(jié)果:
Hello World!

七晴及、 創(chuàng)建可執(zhí)行的jar

這里通過(guò)maven插件來(lái)實(shí)現(xiàn)都办,在pom.xml中引入spring-boot-maven-plugin

  <!-- 可執(zhí)行jar-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

執(zhí)行mvn package

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building springboot 1.0.0
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ springboot ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ springboot ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ springboot ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory G:\Mybook\springBoot\src\test\resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ springboot ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ springboot ---
[INFO] No tests to run.
[INFO] 
[INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ springboot ---
[INFO] 
[INFO] --- spring-boot-maven-plugin:1.5.2.RELEASE:repackage (default) @ springboot ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.790 s
[INFO] Finished at: 2017-06-25T19:47:08+08:00
[INFO] Final Memory: 19M/226M
[INFO] ------------------------------------------------------------------------

打包之后,再target下面會(huì)出現(xiàn)spring-1.0.0.jar

運(yùn)行:
java -jar spring-1.0.0.jar


后續(xù)會(huì)繼續(xù)推出這一系列spring boot的文章

本人網(wǎng)站:一起學(xué)JAVA

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末虑稼,一起剝皮案震驚了整個(gè)濱河市琳钉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蛛倦,老刑警劉巖歌懒,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異溯壶,居然都是意外死亡及皂,警方通過(guò)查閱死者的電腦和手機(jī)甫男,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)验烧,“玉大人板驳,你說(shuō)我怎么就攤上這事“穑” “怎么了若治?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)倔监。 經(jīng)常有香客問(wèn)我,道長(zhǎng)菌仁,這世上最難降的妖魔是什么浩习? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮济丘,結(jié)果婚禮上谱秽,老公的妹妹穿的比我還像新娘。我一直安慰自己摹迷,他們只是感情好疟赊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著峡碉,像睡著了一般近哟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鲫寄,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天吉执,我揣著相機(jī)與錄音,去河邊找鬼地来。 笑死戳玫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的未斑。 我是一名探鬼主播咕宿,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蜡秽!你這毒婦竟也來(lái)了府阀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤芽突,失蹤者是張志新(化名)和其女友劉穎肌似,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诉瓦,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡川队,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年力细,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片固额。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡眠蚂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出斗躏,到底是詐尸還是另有隱情逝慧,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布啄糙,位于F島的核電站笛臣,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏隧饼。R本人自食惡果不足惜沈堡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望燕雁。 院中可真熱鬧诞丽,春花似錦、人聲如沸拐格。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)捏浊。三九已至懂衩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間金踪,已是汗流浹背勃痴。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留热康,地道東北人沛申。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像姐军,于是被迫代替她去往敵國(guó)和親铁材。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容