开发第一个RESTful应用程序,已经从困难到简单

大家好呀,我是七哥。

本篇是《Spring江湖路》系列文章的第 4 回,持续更新中…

本文提供完整代码示例,详见 https://gitee.com/isevenluo/spring-road/ 的 spring-road02 目录。

公众号:七哥聊编程,回复【pdf】获取精选计算机电子书资源!


大家都知道,我们要用 Spring 创建一个RESTful 应用程序,是需要为框架做很多事情的,比如往项目的构建文件中添加各种库依赖,还要自己写各种配置文件,因为 Spring 虽然牛逼的提供了很多优秀的特性,但是我们还是需要配置告诉 Spring 该怎么做。

但是,现在都啥时代了,全人类都讲究自动化、智能化了,我们程序员开发任务为啥就不能来点自动化、智能化呢? 这不, Spring Boot 横空出世了。它拥有的 起步依赖、自动配置 特性,让我们拒绝那些繁琐且千篇一律的配置,解放程序员的双手,集中精力开发应用程序即可。

今天这篇文章的目标,就是带大家用 Spring Boot 开发一个视频观看列表的应用程序,一起感受 Spring Boot 的强大。

1. 前言

我们今天要开发的这个视频观看列表应用程序,可以支持用户查找观看列表,输入自己想看的视频信息,删除已经看过的视频。

技术栈采用 Spring Boot 快速开发、Spring MVC 处理 Web 请求, Thymeleaf 来定义 Web 视图,Spring Data JPA 来持久化观看列表到数据化,数据库使用 H2。

2. 初始化项目

创建 Spring Boot 项目的几种方式我们之前已经讲过了,本质都是使用的 Spring Initializr,选择最合适的就好,但是要确保勾选了我们需要的依赖。

使用 IDEA 选择 Initializr 创建项目:

创建完成后,就得到了如下图的项目结构:

基本上 Spring Boot 项目初始化完成后的结构都是一样的,你可能已经着急想开发应用程序了,但是在进入下一步写代码之前,我们还是停下脚步来具体看下项目里的这些东西都是干啥的,我觉得这是很重要的!搞清楚了大概的原理在开发的时候就不容易踩坑了,免得你在实际工作中不明所以,改这些文件也是糊里糊涂的,这样容易出 bug 的~~

3. Spring Boot项目的结构

总体来说 Spring Boot 项目是遵循 Maven 或者 Gradle 的项目布局的,主要代码放在 src/main/java 路径下,配置文件放到 src/main/resources 路径下,测试代码放到 src/test/java 路径下,如果有测试配置就放在 src/test/resources 路径。

我们再来看下我们项目根目录中还有不少文件:

  • build.gradle: Gradle 构建说明文件;
  • SpringRoad02Application.java:应用程序的启动引导类,同时也是主要的 Spring 配置类
  • application.properties:用于配置应用程序和 Spring Boot 的属性;
  • SpringRoad02ApplicationTests.java:基本的集成测试类;

启动引导Spring

SpringRoad02Application 它的作用是启动引导和配置。

//开启组件扫描和自动配置
@SpringBootApplication 
public class SpringRoad02Application {
   

    public static void main(String[] args) {
   
        // 启动引导应用程序
        SpringApplication.run(SpringRoad02Application.class, args); 
    }

}

@SpringBootApplication 这个注解是如何开启组件扫描和自动配置功能的呢

这是因为 @SpringBootApplication 注解将三个有用的注解组合在了一起:

  • @SpringBootConfiguration:标明该类是一个基于 Java 代码的 Spring 配置类;
  • @ComponentScan:启用组件扫描,这样项目中我们写的控制器和其它服务类才会被 Spring 扫描注册为应用程序上下文中的 Bean;
  • @EnableAutoConfiguration:这个注解最牛逼,就是它开启了 Spring Boot 的黑魔法,让我们不用写 Spring 那些繁琐的 xml 配置;

那要运行 Spring Boot 应用,除了传统的 WAR 包部署,启动类的 main 方法支持我们在命令行里把应用程序当成可执行的 JAR 包来运行。实际上就算我们一行代码都不写,这个项目已经是可运行的了,最简单的构建运行方法就是 Gradle 的 bootRun 任务,你可以执行下面的命令感受一下:

gradle bootRun

启动成功截图:

测试Spring Boot应用程序

Initializr 还提供了一个测试类:SpringRoad02ApplicationTests ,可以基于它我们来为应用程序编写测试。

@SpringBootTest // 通过 Spring Boot 加载上下文
class SpringRoad02ApplicationTests {
   

    @Test
    void contextLoads() {
   
    }

}

可以直接运行这个 contextLoads() 方法,不报错就说明加载应用程序上下文是没有问题的:

配置应用程序属性

Initializr 生成的项目中有一个空的 application.properties 文件,这个文件其实是可选的,你可以删掉,但是一般会保留,因为实际项目肯定都有很多的属性配置,比如数据库、mq、redis 等等。

我们可以给这个文件配置一个属性 sever.port=8000 试试看:

加上后,我们在启动程序,它内嵌的 Tomcat 监听端口就从默认的 8080 改为了 8000。

神奇的地方在于,我们完全不用告诉 Spring Boot 去加载 application.properties 文件,只要它在根目录存在就会自动被加载,Spring 和 应用程序就可以获取其中配置的属性。

4. 构建说明文件,起步依赖介绍

项目基本结构我们上面都已经介绍的差不多了,那接下里我们就来看看 Spring Boot 应用程序到底是如何构建的。比如 Spring Boot 为什么可以支持打 JAR 包部署? 如果没有 Spring Boot 我们要使用 Spring MVC 需要添加哪个依赖,应该用哪个版本的 Spring Data JPA? 这些包放在一起的兼容性如何?

上面这些问题,都是我们在开发 Spring 应用程序会遇到的问题,一般情况下项目需要依赖包我们都是直接从其它项目拷贝过来,因为现有项目经过了测试,依赖jar包之前的兼容性经过了测试,出现问题的情况就比较小。不过就算这样,这也是一项复杂繁琐的工作。

好在 Spring Boot 的出现解放了我们奋战在一线的程序员,因为它引入了起步依赖这个特性,简而言之就是可以根据功能来引入对应的依赖包

比如我们要开发一个 Web 应用,它使用 Thymeleaf,通过 Spring Data JPA 来持久化数据,那我们的构建文件就只需要写上这些功能就可以了。

比如下面这样,就是我通过 Spring Initializr 创建 Spring Boot 应用程序后 Gradle 构建文件里的包依赖说明:

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframew
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值