理解了IoC与DI,我们就可以着手编写第一个Spring程序了。
本章目录
如何通过spring.io创建基础骨架
骨架的基本结构
运行项目
简单的分析pom.xml
一些疑问解答
生成骨架
- 首先访问
https://start.spring.io/
,这是spring官方的骨架生成器网站Spring Initializr
- 选择Maven工程
- Spring Boot使用默认的2.1.6版本
- Artifact属性就是生成的项目名称
- Dependencies方面选择Web支持与Actuator。
打开项目
- IDE选择IntelliJ IDEA,打开项目后的目录结构如下
- 其中HelloSpringApplication类是带有SpringBootApplication注解的入口程序
application.properties则是spring自动生成的一个空的配置文件。
-
接着我们编辑HelloSpringApplication
添加@RestController注解,同时新增一个简单的hello接口。编辑之后即可运行程序
运行项目
项目成功运行之后,我们可以再IDEA的run窗口看到Spring Boot内置的Tomcat已经跑在了本机的8080端口上
-
打开IDEA的Terminal窗口,或是自行打开cmd切换至本项目的路径
-
回车之后就能看到接口返回的字符串了
好了,至此我们的项目已经是一个完整的服务器应用了,那么我们在创建过程中总共做了哪些工作呢?
利用骨架生成器生成Spring Boot骨架项目
用IDEA打开项目,自动下载依赖包等
添加@RestController控制器注解,写了一个极为简单的接口。
一个Spring Boot项目从无到有只需这3步,这就是Spring Boot的魅力所在了。
那先前与web模块一同添加进项目的Actuator用意何在呢?
Spring Boot Actuator是spring boot项目一个监控模块,它可以帮助你监控和管理Spring Boot应用,比如健康检查、审计、统计和HTTP追踪等。
- 下面演示一个简单使用,在Terminal或CMD中输入以下命令:
curl http://localhost:8080/actuator/health
这个内置接口能够告诉我们此时运行的应用程序的状态如何,如果一切正常,则会返回以下结果
体验了接口之后,你可能会想,Web模块与Actuator模块是我们在利用骨架生成工具时勾选添加的,那么实际上项目是如何添加这几个模块的依赖呢?接下来让我们来揭开项目根目录下pom.xml的面纱。
分析项目
pom.xml是Maven工程的特点,如果你更熟悉Gradle的话,我猜测你在Android领域应该有所建树了,自然也能够快速上手Maven。打开pom.xml文件,就能看到Spring Boot自动生成的内容
其中Spring Boot指定了spring-boot-starter-parent作为我们整个Maven工程的parent,而2.1.6的版本是先前我们在网站上指定的
项目所使用的Java版本由我们指定为了1.8
以下就是项目的依赖,原来web模块与actuator模块是在此处被引入项目的
或许你看到这里会很奇怪,为什么这些依赖没有指定版本号呢?那是因为在Spring Boot中我们只需要告诉maven我们需要什么依赖,而其对应的版本号则是由parent管理的。
接下来我们能够看到文件的最后引入了一个plugin,这个plugin的功能就是在我们打包项目的过程中生成一个可执行的jar包,下面来演示一下这个功能
- 在Terminal中输入以下命令
mvn clean package -Dmaven.test.skip
等待数秒之后,可以看到以下输出信息
我们暂时不去深究命令,只需知道它能够打出我们想要的jar包就足够了。此时我们将目光移向项目目录,能够发现src文件夹下新增了一个target文件夹,将其展开就能够看到我们所需的jar包了
- 在Terminal窗口中输入以下命令,进入target路径,运行jar包
数秒之后就能看到我们的应用已经成功跑起来了,这种以java -jar
的方式与直接点击run
按钮并无区别。
一些疑问
-
为什么打出的包是jar包而不是war包?
Spring Boot默认打出的是可执行的Jar包,这个Jar包与普通的jar包结构不同,其中包含所依赖的各种Jar,同时也会有Web容器,因此无需容器就能够直接运行。
为什么不是curl
http://localhost:8080/hello-spring/hello
?
因为这个项目就是发布在ROOT,即直接发布在/的。
到此我们已经写完了第一个Spring应用程序,也成功将它跑了起来,简单两笔就勾绘出了Spring最基础的样子,这就是Spring Boot想要带给我们的。