如何优雅地写出HelloWorld(SpringBoot版)

柯里蝉翼
• 阅读 2662

第一步永远都是创建项目,SpringBoot也不例外

一、实现一个简单的HelloWorld

1、新建一个SpringBoot项目

如何优雅地写出HelloWorld(SpringBoot版)

点击下一步,进入项目创建界面(需要连网哦!)

如何优雅地写出HelloWorld(SpringBoot版)

完成点击next,进入依赖添加界面,由于我们做web相关开发,于是选择web依赖

如何优雅地写出HelloWorld(SpringBoot版)

最后再检查一下项目名称

如何优雅地写出HelloWorld(SpringBoot版)

没有问题,则点击finish。点击后,一个springboot项目便创建好了。需要说明的是,由于初次创建需要springboot项目做大量的自动配置,所以花费时间较长,请耐心等待噢~


接下来就是敲代码环节:

2、编写主程序类

(其实在我们创建springboot项目后,这个类也是已经为我们创建好了)

主程序类的作用是启动SpringBoot项目,即项目的主入口

如何优雅地写出HelloWorld(SpringBoot版)

3、编写业务逻辑HelloController类

因为我们要实现“输出HelloWorld”功能,所以我们需要浏览器发送hello请求,服务器接收请求并处理,最终反馈给浏览器相应请求的字符串

如何优雅地写出HelloWorld(SpringBoot版)

编写好业务代码以后,我们从主程序类中启动项目。项目启动成功后,则如下图:

如何优雅地写出HelloWorld(SpringBoot版)

这也表明,我们的项目启动成功了。这时候打开浏览器,输入:localhost:8080/hello(即请求数据),浏览器运行结果如下:

如何优雅地写出HelloWorld(SpringBoot版)

二、细节探究

当然,仅仅一个HelloWorld并没有什么难度,但是我们是否注意到了这个小项目的诸多细节呢?因为我们今后会经常和这些小细节打交道,因此,有必要再唠叨唠叨。

1、@SpringBootApplication注解

如何优雅地写出HelloWorld(SpringBoot版)

所谓注解,即Annotation,中文译过来就是注解、标释的意思

此处我们在出程序类前加了一个@SpringBootApplication注解,它有什么用处呢?其用处是标注在某个SpringBoot项目的类上,以此说明这个类是SpringBoo的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoo应用。

我们可以ctrl+左键(这个小技巧十分方便)点击它,进入如下界面:

如何优雅地写出HelloWorld(SpringBoot版)

这说明@SpringBootApplication注解其实是组合注解,即本身是由多个注解组成的。

这条细节牵扯的细节很多,在此我们讲解两个核心知识点:①SpringBoot Starter 的工作原理;②Spring Boot 的自动配置的实现流程

①SpringBoot Starter 的工作原理

这主要涉及SpringBoot 在启动环节经历的流程:

  • SpringBoot 在启动时会先在依赖的 Starter 包中寻找 resources/META-INF/spring.factories 文件,然后根据文件中配置的 Jar 包去扫描项目所依赖的 Jar 包。
  • 根据 spring.factories 配置加载 AutoConfigure 类
  • 根据 @Conditional 注解的条件,进行自动配置并将 Bean 注入 Spring Context

总结:其实就是 SpringBoot 在启动的时候,按照约定读取 SpringBoot Starter 的配置信息,再根据配置信息对资源进行初始化,并注入到 Spring 容器中。这样 Spring Boot 启动完毕后,就已经准备好了一切资源,使用过程中直接注入对应 Bean 资源即可。

②Spring Boot 的自动配置的实现流程

前面我们已经知道Spring Boot 项目的启动注解是:@SpringBootApplication,其实它就是由下面三个注解组成的:

  • @Configuration
  • @ComponentScan
  • @EnableAutoConfiguration

其中 @EnableAutoConfiguration 是实现自动配置的入口,该注解又通过 @Import 注解导入AutoConfigurationImportSelector,在该类中加载 META-INF/spring.factories 的配置信息。然后筛选出以EnableAutoConfiguration 为 key 的数据,加载到 IOC 容器中,最终实现自动配置功能。

2、业务逻辑HelloController类的注解

我们发现,在刚才编写的HelloController类内,有@ResponseBody注解。其实我们可以把@ResponseBody注解写在类的外面,这表示这个类的所有方法返回的数据直接写给浏览器(如果是对象则转为json数据)

如何优雅地写出HelloWorld(SpringBoot版)

另外,需要注意的是,@ResponseBody和@Controller这两个注解可以用@RestController进行替换

如何优雅地写出HelloWorld(SpringBoot版)

3、默认生成的SpringBoot项目目录结构

我们创建完项目后,SpringBoot项目会自动生成目录结构

如何优雅地写出HelloWorld(SpringBoot版)

  • src/main/java:主程序入口 TinyContractApplication,可以通过直接运行该类来启动 SpringBoot应用
  • src/main/resources:配置目录,该目录用来存放应用的一些配置信息,比如应用名、服务端口、数据库配置等。由于我们应用了Web模块,因此产生了 static目录与templates目录,前者用于存放静态资源,如图片、CSS、JavaScript等;后者用于存放Web页面的模板文件。
  • src/test:单元测试目录,生成的 TinyContractApplicationTests 通过 JUnit4实现,可以直接用运行 Spring Boot应用的测试。
  • application.properties:用来保存数据库链接信息等应用程序数据
  • pom.xml:全局配置文件

例如我们想要修改tomcat的端口号,我们可以打开application.properties,并输入server.port=8088

如何优雅地写出HelloWorld(SpringBoot版)

启动项目后我们发现端口号变为了8088

如何优雅地写出HelloWorld(SpringBoot版)

4、SpringBoot项目中将tomcat默认添加

我们发现以往在编写完一个java的web项目后,还需要配tomcat服务器,但是在SpringBoot项目中,再也不需要这一步了,因为SpringBoot项目已经将tomcat集成到了项目当中

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
4年前
VBox 启动虚拟机失败
在Vbox(5.0.8版本)启动Ubuntu的虚拟机时,遇到错误信息:NtCreateFile(\\Device\\VBoxDrvStub)failed:0xc000000034STATUS\_OBJECT\_NAME\_NOT\_FOUND(0retries) (rc101)Makesurethekern
Wesley13 Wesley13
4年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
4年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
4年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
4年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Easter79 Easter79
4年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
4年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0