全網最細的SpringBoot系列教程-不一樣的Hello

關于SpringBoot

第1篇:SprintBoot的前世今生稍后會奉上,本篇是SpringBoot系列的第2篇文章,在后面系列的教程中,會詳細分享SpringBoot生態(tài)圈中的各個成員,例如:

  • 最基礎的3層架構

  • 訪問數據庫的3種常用方案

  • MyBatis

  • MyBatis-Plus

  • fluent mybatis

  • NoSQL

  • Redis

  • MongoDB

  • ElasticSearch

  • 消息隊列

  • RabbitMQ

  • Kafka

  • RocketMQ

  • ...

系列教程特點

  • 主流:分享的都是主流的技術點

  • 詳細:非常詳細,會穿插各種小知識點

  • 全面:如前文所述,數據訪問層會分享

  • MyBatis

  • MyBatis-Plus

  • fluent mybatis

  • sharding-JDB

  • 深度:會分享研發(fā)過程中需要注意的各種知識點,比如日志輸出常遇到的坑,絕對的干貨

創(chuàng)建工程

  • Step1: 啟動idea,我用的是IDEA Community Edition(不同版本,界面長的會稍微有些差別),點擊【New Project】按鈕,就是下圖中的【+】圖標
img
  • Step2:如下圖:

  • 選擇Maven

  • Project SDK:選擇你本地JDK版本,我本地安裝的是JDK11,想嘗鮮的同學,可以安裝JDK的最新版本:JDK17

  • 設置好JDK后,按【Next】按鈕

img
  • Step3:下圖中設置項目的信息,點擊【Artifact Coordinates】會展開更詳細的信息
0 (1).png

老碼農設置的信息如下,根據你自己的項目實際情況,大家自行靈活調整

屬性 輸入 說明

知識點:關于GroupId

groupId一般分為多個段,段之間用【.】分割,通常

  • 第一段為域:比如org(非營利組織)、com(商業(yè)組織)、cn(中國)、top(國際通用頂級域名GTLD(Generictop-level domain top))等

  • 第二段為公司名稱:比如我的就設置成coderoldgeek

  • 第三段為項目名稱:我設置成的是【springboot】

  • 第四段可以是子項目名稱:我設置成的是【examples】

groupId不要隨便設置,最好和包結構保持一致。

設置好這些信息,直接按【Finish】按鈕。

img
  • Step4: 項目開始創(chuàng)建,可能會需要幾秒鐘,創(chuàng)建好后,如下圖展示
img
  • Step5: 關于目錄結構說明

oldgeek-springboot-examples
├─.idea
│─src
│ └─main
│ ├─java
│ ├─resources
│ └─test
└─pom.xml

目錄詳細說明參照下表:

目錄 說明

關于Maven的詳細教程:老碼農正在認真整理,稍后會分享給大家。

創(chuàng)建子模塊

為什么要創(chuàng)建子模塊?

  • 本篇文章后面涉及的例子,其實不用創(chuàng)建子工程,直接在:src/main/java編寫代碼也可以完成。

  • 創(chuàng)建子模塊:后面會分享很多內容,所以想按照知識點創(chuàng)建子工程,便于大家根據自己需要去參考。

創(chuàng)建子模塊

  • Step1: 右鍵選父工程:【oldgeek-springboot-examples 】連續(xù)點擊【New】 -> 【Module...】
img
  • Step2: 同樣,選擇【Maven】-> 【Module SDK】,按【Next】按鈕
img
  • Step3: 下圖中,只需要輸入Name即可,其他的不要修改

  • Name:springboot-hello

img
  • Step4: 創(chuàng)建子模塊,工程的目錄結構如下

oldgeek-springboot-examples
├─.idea
├─springboot-hello
│ └─src
│ └─main
│ ├─java
│ └─resources
│ └─pom.xml
│─src
│ └─main
│ ├─java
│ └─resources
│ └─test
└─pom.xml

關于Maven的詳細教程:老碼農正在認真整理,稍后會分享給大家。

有些同學會有疑問

父工程

  • src/main/java和src/main/resources/還有用嗎?可以刪掉嗎?

  • 答:如果按模塊創(chuàng)建工程,這兩個目錄可以刪掉

  • 父工程:pom.xml 文件可以刪掉嗎?

  • 答:不可以,這個有大用處,本篇文章暫時不展開,咱們徐徐來,莫急

準備編寫第一個能啟動工程,激動人心的時刻馬上就要來了,繼續(xù)跟著做

  • Step1: 依次點擊:【springboot-hello】-> 【src】-> 【main】-> 【java】按右鍵,如下圖,依次點擊 【New】-> 【Package】
img
  • Step2: 輸入如下的Package目錄信息 com.oldgeek.springboot.examples.hello

[圖片上傳失敗...(image-471b33-1635397700065)]

  • Step3: 創(chuàng)建啟動類
Package路徑 類名 說明

創(chuàng)建過程,如下圖,右鍵選Package路徑【com.oldgeek.springboot.examples.hello】,依次【New】-> 【Java Class】

img
  • Step4: 輸入類名:HelloApplication,回車,啟動類就創(chuàng)建好了
0 (2).png
  • Step5: 本次我們要分享的是SpringBoot,接下來我們需要配置SpringBoot的包

打開子工程:springboot-hello/pom.xml文件,文件內容如下。

<?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">
<parent>
<artifactId>oldgeek-springboot-examples</artifactId>
<groupId>com.coderoldgeek.springboot.examples</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>springboot-hello</artifactId>

<properties>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
</properties>

</project>

我們添加和SpringBoot相關的依賴

  • 添加我們使用的SpringBoot版本,在屬性中定義版本信息

<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>

<spring-boot.version>2.5.0</spring-boot.version>
</properties>

  • 添加SpringBoot依賴的包

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring-boot.version}</version>
</dependency>
</dependencies>

  • 子工程完整的pom文件如下

<?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">
<parent>
<artifactId>oldgeek-springboot-examples</artifactId>
<groupId>com.coderoldgeek.springboot.examples</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>springboot-hello</artifactId>

<properties>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
    <!-- spring-boot version -->
    <spring-boot.version>2.5.0</spring-boot.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>${spring-boot.version}</version>
    </dependency>
</dependencies>

</project>

重要知識點:

  • 依賴包的版本盡量在屬性中定義定義,不要散落在各子工程中直接硬編碼,容易導致版本混亂

  • 盡量在父工程中定義,后面會講到,本篇不展開。

  • 不要添加沒有使用的依賴,用啥天啥,千萬不要整太多垃圾。

  • 下面這張圖要注意,修改完pom.xml文件配置選項,一般不會自動刷新,需要按照下面步驟刷新,主要是從遠端倉庫獲取jar包,放到本地倉庫。

  • 如下圖:選中工程,按右鍵,選擇【Maven】->【Reload project】,按下后,會去Maven中央服務器拉取我們所需要的jar包,拉取的時間看你當時的網速,慢的話,可能需要幾分鐘。耐心等待就行。

img
  • Step6: 編寫啟動類代碼,完整代碼如下

package com.oldgeek.springboot.examples.hello;

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

@SpringBootApplication
public class HelloApplication {
public static void main(String[] args) {
SpringApplication.run(HelloApplication.class, args);
}
}
代碼解釋:
啟動類添加注解:@SpringBootApplication
Main方法中調用SpringApplication.run(HelloApplication.class, args);
SpringBoot實例初始化完成后,就會調用run方法啟動服務。

延伸知識點:我們可以看下SpringBootApplication是SpringBoot的核心注解,他是一個組合注解,我們可以查看注解的源代碼,截取部分源代碼,源代碼的分享不是本篇文章重點。

@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:如下源代碼,繼承自:Configuration,此注解是個配置類,容器啟動時會配置初始化參數

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
@Indexed
public @interface SpringBootConfiguration

  • EnableAutoConfiguration:啟動SpringBoot自動配置機制,根據pom包中依賴為當前項目自動進行配置,例如,添加了 spring-boot-starter-web 依賴,會自動添加 Tomcat 和 Spring MVC 的依賴,那么 Spring Boot 會對 Tomcat 和 Spring MVC 進行自動配置。

  • ComponentScan:掃描包的配置,注意:他會自動掃描同級目錄或者下級包里的Bean,所以本入口類建議放置在 grounpID + arctifactID 組合的包名下,我們是:com.oldgeek.springboot.examples.hello

  • Step7: 點擊啟動類:HelloApplication,按右鍵,選擇【Run 'HelloApplication.main()'】開始啟動咱們的工程。

img
  • Step8: 若果你能看到如圖所示的畫面,恭喜你,大概率工程是已經正常啟動了。
img
  • 小知識點

  • 出現問題,先看日志,養(yǎng)成看日志習慣

  • 日志從下往上看,容易定位問題

  • Step9: 我們試著訪問下,打開你的瀏覽器,輸入:http://localhost:8080,點回車,悲劇,下面畫面會出現 沒關系,我們現在只是把服務啟動了,還沒給他添加任何業(yè)務邏輯呢,自然會掛。

img

添加業(yè)務邏輯

  • Step1: 選中Package:com.oldgeek.springboot.examples.hello,【New】->【Package】
img

向下圖輸入:controller,完整的package:com.oldgeek.springboot.examples.hello.controller

0 (3).png
  • Step2: 添加控制類:HelloController
img

選中controller,點擊右鍵:【New】->【Java Class】,創(chuàng)建控制類

img

輸入控制類名字:HelloController

0 (4).png
  • Step3: 編寫業(yè)務邏輯

package com.oldgeek.springboot.examples.hello.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {
/**
* Hello World
*/
@GetMapping("hello")
@ResponseBody
public String hello() {
return "歡迎您光臨小碼匠和老碼農的SpringBoot家園
未來的日子中,我們一起學編程,一起分享技術";
}
}
代碼說明:

  • 注解:@Controller:控制器Controller負責處理由DispatcherServlet 分發(fā)的請求,它把用戶請求的數據經過業(yè)務處理層處理之后封裝成一個Model ,然后再把該Model 返回給對應的View 進行展示。

  • 注解:@GetMapping("hello"):定義Request請求和Controller 方法之間的映射,此處我們是用Get方式請求

  • 注解:@ResponseBody:把處理的結果直接寫入 HTTP response body 中,返回給調用方

  • Step4:

  • 重新啟動服務

  • 訪問,再次啟動瀏覽器,地址欄中輸入:http://localhost:8080/hello

0 (5).png

特別關注

  • pom中添加新依賴時,要執(zhí)行maven的【Reload Project】操作,不然很可能編譯失敗

  • groupId和artifactId的命名規(guī)則,不要隨意命名,專業(yè)人士做專業(yè)事

關注公眾號【小碼匠和老碼農】收獲小碼匠和老碼農精心挑選的電子書

  • 回復: java, 獲得Java基礎教程

  • 回復: jvm, 獲得JVM資料

  • 回復: springboot, 獲得SpringBoot資料

  • 回復: springcloud, 獲得springcloud資料

  • 回復: python, 獲得Python資料

  • 回復: 算法, 獲得算法資料

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,836評論 6 540
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 99,275評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,904評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,633評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,368評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,736評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,740評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,919評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 49,481評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,235評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,427評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,968評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,656評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,055評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,348評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,160評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,380評論 2 379

推薦閱讀更多精彩內容