全网最细的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】按钮,就是下图中的【+】图标
Step2:如下图:
选择Maven
Project SDK:选择你本地JDK版本,我本地安装的是JDK11,想尝鲜的同学,可以安装JDK的最新版本:JDK17
设置好JDK后,按【Next】按钮
Step3:下图中设置项目的信息,点击【Artifact Coordinates】会展开更详细的信息
老码农设置的信息如下,根据你自己的项目实际情况,大家自行灵活调整
属性
输入
说明
知识点:关于GroupId
groupId一般分为多个段,段之间用【.】分割,通常
第一段为域:比如org(非营利组织)、com(商业组织)、cn(中国)、top(国际通用顶级
域名
GTLD(Generic
top
-level domain
top
))等
第二段为公司名称:比如我的就设置成coderoldgeek
第三段为项目名称:我设置成的是【springboot】
第四段可以是子项目名称:我设置成的是【examples】
groupId不要随便设置,最好和包结构保持一致。
设置好这些信息,直接按【Finish】按钮。
Step4: 项目开始创建,可能会需要几秒钟,创建好后,如下图展示
Step5: 关于目录结构说明
oldgeek-springboot-examples├─.idea │─src│ └─main│ ├─java│ ├─resources│ └─test└─pom.xml
目录详细说明参照下表:
目录
说明
**关于Maven的详细教程:**老码农正在认真整理,稍后会分享给大家。
创建子模块
为什么要创建子模块?
本篇文章后面涉及的例子,其实不用创建子工程,直接在:src/main/java编写代码也可以完成。
创建子模块:后面会分享很多内容,所以想按照知识点创建子工程,便于大家根据自己需要去参考。
创建子模块
Step1: 右键选父工程:【oldgeek-springboot-examples 】连续点击【New】 -> 【Module...】
Step2: 同样,选择【Maven】-> 【Module SDK】,按【Next】按钮
Step3: 下图中,只需要输入Name即可,其他的不要修改
Name:springboot-hello
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】
Step2: 输入如下的Package目录信息 com.oldgeek.springboot.examples.hello
Step3: 创建启动类
Package路径
类名
说明
创建过程,如下图,右键选Package路径【com.oldgeek.springboot.examples.hello】,依次【New】-> 【Java Class】
Step4: 输入类名:HelloApplication,回车,启动类就创建好了
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 --> <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文件如下
oldgeek-springboot-examples com.coderoldgeek.springboot.examples 1.0-SNAPSHOT 4.0.0 springboot-hello 11 11 2.5.0 org.springframework.boot spring-boot-starter-web ${spring-boot.version}
重要知识点:
依赖包的版本尽量在属性中定义定义,不要散落在各子工程中直接硬编码,容易导致版本混乱
尽量在父工程中定义,后面会讲到,本篇不展开。
不要添加没有使用的依赖,用啥天啥,千万不要整太多垃圾。
下面这张图要注意,修改完pom.xml文件配置选项,一般不会自动刷新,需要按照下面步骤刷新,主要是从远端仓库获取jar包,放到本地仓库。
如下图:选中工程,按右键,选择【Maven】->【Reload project】,按下后,会去Maven中央服务器拉取我们所需要的jar包,拉取的时间看你当时的网速,慢的话,可能需要几分钟。耐心等待就行。
Step6: 编写启动类代码,完整代码如下
package com.oldgeek.springboot.examples.hello;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic 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@Indexedpublic @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()'】开始启动咱们的工程。
Step8: 若果你能看到如图所示的画面,恭喜你,大概率工程是已经正常启动了。
小知识点
出现问题,先看日志,养成看日志习惯
日志从下往上看,容易定位问题
Step9: 我们试着访问下,打开你的浏览器,输入:http://localhost:8080,点回车,悲剧,下面画面会出现 没关系,我们现在只是把服务启动了,还没给他添加任何业务逻辑呢,自然会挂。
添加业务逻辑
Step1: 选中Package:com.oldgeek.springboot.examples.hello,【New】->【Package】
向下图输入:controller,完整的package:com.oldgeek.springboot.examples.hello.controller
Step2: 添加控制类:HelloController
选中controller,点击右键:【New】->【Java Class】,创建控制类
输入控制类名字:HelloController
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;@Controllerpublic 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
作者:小码匠和老码农
链接:https://juejin.cn/post/7023961646250852360