全网最细的SpringBoot系列教程-不一样的Hello

关于SpringBoot

第1篇:SprintBoot的前世今生稍后会奉上,本篇是SpringBoot系列的第2篇文章,在后面系列的教程中,会详细分享SpringBoot生态圈中的各个成员,例如:

  • 最基础的3层架构

  • 访问数据库的3种常用方案

  • MyBatis

  • MyBatis-Plus

  • fluent mybatis

  • NoSQL

  • Redis

  • MongoDB

  • ElasticSearch

  • 消息队列

  • RabbitMQ

  • Kafka

  • RocketMQ

  • ...

系列教程特点

  • 主流:分享的都是主流的技术点

  • 详细:非常详细,会穿插各种小知识点

  • 全面:如前文所述,数据访问层会分享

  • MyBatis

  • MyBatis-Plus

  • fluent mybatis

  • sharding-JDB

  • 深度:会分享研发过程中需要注意的各种知识点,比如日志输出常遇到的坑,绝对的干货

创建工程

  • 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(商业组织)、cn(中国)、top(国际通用顶级域名GTLD(Generictop-level domain top))等

  • 第二段为公司名称:比如我的就设置成coderoldgeek

  • 第三段为项目名称:我设置成的是【springboot】

  • 第四段可以是子项目名称:我设置成的是【examples】

groupId不要随便设置,最好和包结构保持一致。

设置好这些信息,直接按【Finish】按钮。

img
  • Step4: 项目开始创建,可能会需要几秒钟,创建好后,如下图展示
img
  • Step5: 关于目录结构说明

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

目录详细说明参照下表:

目录 说明

关于Maven的详细教程:老码农正在认真整理,稍后会分享给大家。

创建子模块

为什么要创建子模块?

  • 本篇文章后面涉及的例子,其实不用创建子工程,直接在:src/main/java编写代码也可以完成。

  • 创建子模块:后面会分享很多内容,所以想按照知识点创建子工程,便于大家根据自己需要去参考。

创建子模块

  • Step1: 右键选父工程:【oldgeek-springboot-examples 】连续点击【New】 -> 【Module...】
img
  • Step2: 同样,选择【Maven】-> 【Module SDK】,按【Next】按钮
img
  • Step3: 下图中,只需要输入Name即可,其他的不要修改

  • Name:springboot-hello

img
  • Step4: 创建子模块,工程的目录结构如下

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/还有用吗?可以删掉吗?

  • 答:如果按模块创建工程,这两个目录可以删掉

  • 父工程:pom.xml 文件可以删掉吗?

  • 答:不可以,这个有大用处,本篇文章暂时不展开,咱们徐徐来,莫急

准备编写第一个能启动工程,激动人心的时刻马上就要来了,继续跟着做

  • Step1: 依次点击:【springboot-hello】-> 【src】-> 【main】-> 【java】按右键,如下图,依次点击 【New】-> 【Package】
img
  • Step2: 输入如下的Package目录信息 com.oldgeek.springboot.examples.hello

[图片上传失败...(image-471b33-1635397700065)]

  • Step3: 创建启动类
Package路径 类名 说明

创建过程,如下图,右键选Package路径【com.oldgeek.springboot.examples.hello】,依次【New】-> 【Java Class】

img
  • Step4: 输入类名:HelloApplication,回车,启动类就创建好了
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
  • 小知识点

  • 出现问题,先看日志,养成看日志习惯

  • 日志从下往上看,容易定位问题

  • Step9: 我们试着访问下,打开你的浏览器,输入:http://localhost:8080,点回车,悲剧,下面画面会出现 没关系,我们现在只是把服务启动了,还没给他添加任何业务逻辑呢,自然会挂。

img

添加业务逻辑

  • 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】,创建控制类

img

输入控制类名字:HelloController

0 (4).png
  • Step3: 编写业务逻辑

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 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。

  • 注解:@GetMapping("hello"):定义Request请求和Controller 方法之间的映射,此处我们是用Get方式请求

  • 注解:@ResponseBody:把处理的结果直接写入 HTTP response body 中,返回给调用方

  • Step4:

  • 重新启动服务

  • 访问,再次启动浏览器,地址栏中输入:http://localhost:8080/hello

0 (5).png

特别关注

  • pom中添加新依赖时,要执行maven的【Reload Project】操作,不然很可能编译失败

  • groupId和artifactId的命名规则,不要随意命名,专业人士做专业事

关注公众号【小码匠和老码农】收获小码匠和老码农精心挑选的电子书

  • 回复: java, 获得Java基础教程

  • 回复: jvm, 获得JVM资料

  • 回复: springboot, 获得SpringBoot资料

  • 回复: springcloud, 获得springcloud资料

  • 回复: python, 获得Python资料

  • 回复: 算法, 获得算法资料

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容