Spring Boot HelloWorld

一呆抑、Spring Boot入門


1岂嗓、Spring Boot簡介


簡化Spring應(yīng)用開發(fā)的一個框架;
整個Spring技術(shù)棧的一個大整合鹊碍;
J2EE開發(fā)的一站式解決方案

2厌殉、微服務(wù)


2014年食绿,martin flower
微服務(wù):架構(gòu)風(fēng)格
一個應(yīng)用應(yīng)該是一組小型服務(wù);可以通過HTTP的方式進(jìn)行互通公罕;

單體應(yīng)用:ALL IN ONE器紧;

每一個功能元素最終都是一個可獨(dú)立替換和獨(dú)立升級的軟件單元;

詳細(xì)參照微服務(wù)文檔

環(huán)境約束
-jdk1.8:Spring Boot 1.7及以上
-maven3.x:maven 3.3以上版本楼眷;
-IntelliJIDEA2017铲汪、STS
-SpringBoot 1.5.9.REALEASE

3、環(huán)境準(zhǔn)備


1罐柳、MAVEN設(shè)置

給maven的settings.xml配置文件的profiles標(biāo)簽添加上

<profile>
    <id>jdk-1.8</id>
    <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>1.8</jdk>
    </activation>
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
    </properties>
</profile>

2掌腰、IDEA設(shè)置

打開IDEA的Settings,找到maven選項(xiàng)张吉,將IDEA使用的maven換成我們本地的maven路徑齿梁,同時使用本地的settings.xml文件,并設(shè)置好本地倉庫芦拿。

4士飒、Spring Boot HelloWorld


一個功能:
瀏覽器發(fā)送hello請求,服務(wù)器接受請求并處理蔗崎,相應(yīng)HelloWorld字符串酵幕;

1、創(chuàng)建一個maven工程缓苛;(jar)

2芳撒、導(dǎo)入SpringBoot相關(guān)依賴;

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
    </parent>

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

3未桥、編寫一個主程序

/**
 * @SpringBootApplication 來標(biāo)注一個主程序類笔刹,說明這是一個SpringBoot應(yīng)用
 */
@SpringBootApplication
public class HelloWorldMainApplication {
    public static void main(String[] args) {
        //Spring應(yīng)用啟動起來
        SpringApplication.run(HelloWorldMainApplication.class,args);
    }
}

4、編寫相關(guān)的Controller冬耿、Service

public class HelloController {
    
    @ResponseBody
    @RequestMapping("/hello")
    public String hello() {
        return "Hello World!";
    }
}

5舌菜、運(yùn)行主程序測試

6、簡化部署

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

將這個應(yīng)用打成jar包日月,直接使用java -jar的命令進(jìn)行執(zhí)行;

5缤骨、Hello World探究


1爱咬、POM文件

1、父項(xiàng)目

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
 </parent>

他的父項(xiàng)目是
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>1.5.9.RELEASE</version>
        <relativePath>../../spring-boot-dependencies</relativePath>
</parent>
他來真正管理Spring Boot應(yīng)用里面的所有依賴版本绊起;

SpringBoot的版本仲裁中心精拟;
以后我們導(dǎo)入依賴默認(rèn)是不需要寫版本的;(沒有在dependencies里面管理的依賴自然需要聲明版本號)

2、啟動器

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

spring-boot-starter-web:
spring-boot-starter:spring-boot場景啟動器蜂绎;(web)幫我們導(dǎo)入了web模塊正常運(yùn)行所依賴的組件栅表;

SpringBoot將所有的功能場景都抽取出來,做成一個個的starters(啟動器)荡碾,只需要在項(xiàng)目里面引入這些starter相關(guān)場景的所有依賴都會導(dǎo)入進(jìn)來谨读。要用什么功能就導(dǎo)入什么場景啟動器。

2坛吁、主程序類,主入口類

/**
 * @SpringBootApplication 來標(biāo)注一個主程序類铐尚,說明這是一個SpringBoot應(yīng)用
 */
@SpringBootApplication
public class HelloWorldMainApplication {
    public static void main(String[] args) {
        //Spring應(yīng)用啟動起來
        SpringApplication.run(HelloWorldMainApplication.class,args);
    }
}

@SpringBootApplication:標(biāo)注在某個類上說明這個類是SpringBoot的主配置類拨脉,SpringBoot就應(yīng)該運(yùn)行這個類的main方法來啟動SpringBoot應(yīng)用;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
        @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
        @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {

@SpringBootConfiguration:SpringBoot配置類宣增;
????標(biāo)注在某個類上玫膀,表示這是一個SpringBoot配置類;
????@Configuration:配置類上來標(biāo)注這個注解爹脾;
????配置類------配置文件帖旨;配置類也是容器中的一個組件;@Component

@EnableAutoConfiguration:開啟自動配置功能灵妨;
????以前我們需要配置的東西解阅,SpringBoot幫我們自動配置;@EnableAutoConfiguration告訴SpringBoot開啟自動配置功能泌霍;這樣自動配置功能才能生效货抄;

@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {

????@AutoConfigurationPackage:自動配置包
????????@Import(AutoConfigurationPackages.Registrar.class)
????????Spring的底層注解@Import,給容器中導(dǎo)入一個組件朱转,導(dǎo)入的組件由AutoConfigurationPackages.Registrar.class蟹地;
????????將主配置類(SpringBootApplication標(biāo)注的類)所在包下及下面所有子包里面的所以組件掃描到Spring容器中;
????@Import(EnableAutoConfigurationImportSelector.class)
????????給容器中導(dǎo)入組件EnableAutoConfigurationImportSelector.class:導(dǎo)入哪些組件的選擇器
????????將所有需要導(dǎo)入的組件以全類名的方式返回藤为;這些組件就會被添加到容器中怪与;
????????會給容器中導(dǎo)入非常多的自動配置類(xxxAutoConfiguration);就是給容器中導(dǎo)入這個場景需要的所有組件缅疟,并配置好這些組件分别;


有了自動配置類,免去了我們手動編寫配置注入功能組件等工作窿吩;
SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader)茎杂;
SpringBoot在啟動的時候從類路徑下的META-INF/spring.factories中獲取EnableAutoConfiguration指定的值;
將這些值作為自動配置類導(dǎo)入到容器中纫雁,自動配置類就生效了煌往,幫我們進(jìn)行自動配置工作;以前我們需要自己配置的東西,自動配置類都幫我們做了刽脖;
J2EE的整體整合解決方案和自動配置都在spring-boot-autoconfigure-1.5.9.RELEASE.jar羞海;

6、使用Spring Initializer快速創(chuàng)建Spring Boot項(xiàng)目


IDE都支持使用Spring的項(xiàng)目創(chuàng)建向?qū)Э焖賱?chuàng)建一個SpringBoot項(xiàng)目;
選擇我們需要的模塊曲管;向?qū)?lián)網(wǎng)創(chuàng)建SpringBoot項(xiàng)目却邓;

默認(rèn)生成的SpringBoot項(xiàng)目;

  • 主程序已經(jīng)生成好了院水,只需要編寫自己的業(yè)務(wù)邏輯
  • resources文件夾中目錄結(jié)構(gòu)
    • static:保存所有的靜態(tài)資源腊徙;js css images;
    • templates:保存所有的模板頁面檬某;(Spring Boot默認(rèn)jar包使用嵌入式Tomcat撬腾,默認(rèn)不支持JSP頁面);
      可以使用模板引擎
    • application.properties:SpringBoot應(yīng)用的配置文件
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末恢恼,一起剝皮案震驚了整個濱河市民傻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌场斑,老刑警劉巖漓踢,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異漏隐,居然都是意外死亡喧半,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門锁保,熙熙樓的掌柜王于貴愁眉苦臉地迎上來薯酝,“玉大人,你說我怎么就攤上這事爽柒∥獠ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵浩村,是天一觀的道長做葵。 經(jīng)常有香客問我,道長心墅,這世上最難降的妖魔是什么酿矢? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮怎燥,結(jié)果婚禮上瘫筐,老公的妹妹穿的比我還像新娘。我一直安慰自己铐姚,他們只是感情好策肝,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布肛捍。 她就那樣靜靜地躺著,像睡著了一般之众。 火紅的嫁衣襯著肌膚如雪拙毫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天棺禾,我揣著相機(jī)與錄音缀蹄,去河邊找鬼。 笑死膘婶,一個胖子當(dāng)著我的面吹牛缺前,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播悬襟,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼诡延,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了古胆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤筛璧,失蹤者是張志新(化名)和其女友劉穎逸绎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體夭谤,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡挟秤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年峭判,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡算柳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出偿曙,到底是詐尸還是另有隱情龙亲,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布恳不,位于F島的核電站檩小,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏烟勋。R本人自食惡果不足惜规求,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卵惦。 院中可真熱鬧阻肿,春花似錦、人聲如沸沮尿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至姨伤,卻和暖如春哨坪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背乍楚。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工当编, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人徒溪。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓忿偷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親臊泌。 傳聞我的和親對象是個殘疾皇子鲤桥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評論 2 355

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