SpringBoot基础学习(一) SpringBoot概念、简单案例实现、单元测试及热部署讲解

时间:2024-02-01 10:39:44

SpringBoot概念

Spring优缺点分析

Spring优点

Spring是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品,无需开发重量级的Enterprise JavaBean(EJB)。Spring为企业级Java开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的Java对象(Plain Old Java Object,POJO)实现了EJB的功能。

Spring缺点

虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。一开始,Spring用XML配置,而且是很多XML配 置。Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。Spring 3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML。

所有这些配置都代表了开发时的损耗,因为在思考Spring特性配置和解决业务问题之间需要进行思维切换,所以编写配置挤占了编写应用程序逻辑的时间。和所有框架一样,Spring实用,但与此同时它要求的回报也不少。

除此之外,项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标, 而且还需要分析导入与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。

SpringBoot解决Spring上述缺点

SpringBoot对上述Spring的缺点进行的改善和优化,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。

起步依赖

起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。

简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能

自动配置

SpringBoot的自动配置,指的是SpringBoot会自动将一些配置类的bean注册进IOC容器,我们可以需要的地方使用@autowired或者@resource等注解来使用它

“自动”的表现形式就是我们只需要引我们想用功能的包,相关的配置我们完全不用管,SpringBoot会自动注入这些配置bean,我们直接使用这些bean即可

SpringBoot的优点

  • 简单、快速、方便地搭建项目;
  • 对主流开发框架的无配置集成;
  • 极大提高了开发、部署效率。

SpringBoot简单案例实现

案例需求:请求Controller中的接口,返回“你好 SpringBoot”到页面。

(1)使用Spring Initializr方式构建SpringBoot项目

Spring Initializr是一个Web应用,它提供了基本的项目结构,能够帮助我们快速构建一个基础的SpringBoot项目。创建步骤如下所示:

打开IDEA->File->New->Project:

Project SDK用于设置创建项目使用的SDK版本,这里我选择JDK1.8版本;在“choose starter service url(选择初始化服务器地址)”下使用默认的初始化服务器地址“https://start.spring.io”进行SpringBoot项目创建(注意使用快速方式创建SpringBoot项目时,主机必须联网)。

点击下一步:

点击Finish,即可完成SpringBoot项目的创建工作:

创建好的SpringBoot项目结构如下图所示:

使用Spring Initializr方式构建的SpringBoot项目会默认生成项目启动类、存放前端静态资源文件夹和模板页面的文件夹、编写项目配置的全局配置文件夹以及进行单元测试的测试类。

(2)创建一个用于Web访问的Controller

在com.hardy.springboot_demo下创建一个名为controller的包,在controller包下创建一个HelloController类,并编写一个返回“你好 SpringBoot”的接口,代码如下:

@RestController // 该注解为组合注解,相当于Spring中 @Controller+@ResponseBody注解
public class HelloController {

    @RequestMapping(name="/demo", produces="application/json; charset=utf-8")
    public String demo(){
        return "你好 SpringBoot";
    }

}

其中 produces = "application/json; charset=utf-8" 是为了解决中文乱码的问题。

(3)运行项目

点击运行按钮:

访问 http://localhost:8080/ 查看结果:

单元测试与热部署

(1)单元测试

开发中,每当完成一个功能接口或业务方法的编写后,通常会借助单元测试验证功能是否正常。SpringBoot对项目的单元测试提供了很好的支持,在使用时,需要提前在项目的pom.xml文件引入spring-boot-starter-test测试依赖启动器,以便通过相关注解实现单元测试。

操作步骤如下:

1、引入spring-boot-starter-test测试依赖启动器

在项目的pom.xml文件引入spring-boot-starter-test测试依赖启动器,示例代码如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

注意:使用Spring Initializr方式搭建的SpringBoot项目会自动加入spring-boot-starter-test测试依赖器,无需再手动添加。

2、编写单元测试类和测试方法

使用Spring Initializr方式搭建的SpringBoot项目,会自动src.test.java测试目录下创建与项目主程序启动类对应的测试类并自带一个contextLoads测试方法,下面来完善一下测试类的代码:

@SpringBootTest // 标记为SpringBoot单元测试类,并加载项目的ApplicationContext上下文环境
class SpringbootDemoApplicationTests {

    @Autowired
    private HelloController helloController;

    /**
     * 自动创建的单元测试方法示例
     */
    @Test
    void contextLoads() {
        String demo = helloController.demo();
        System.out.println(demo);
    }

}

运行测试方法,在控制台查看单元测试结果:

(2)热部署

在开发过程中,通常需要对一段业务代码进行重复修改测试,在修改之后往往需要重启服务,有些服务需要加载很久才能启动成功,这种不必要的重复操作不利于提升开发效率。为此,SpringBoot框架专门提供了进行热部署的依赖启动器,用于进行项目热部署,而无需手动重启项目。

操作步骤:

1、引入spring-boot-devtools热部署依赖启动器

<!-- 引入热部署依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>

引入spring-boot-devtools热部署依赖启动器后,还需要针对IDEA开发工具进行热部署相关的功能设置。

2、IDEA工具热部署设置

选择IDEA工具界面 File->Settings 选项,打开 Compiler 面板设置页面:

选择 Build 下的 Compiler 选项,在右侧勾选 Build project automatically 选项将项目设置为自动编译,单击 OK 按钮保存设置。

在项目的任意页面中使用组合快捷键 Ctrl+Shift+Alt+/ 打开 Maintenance 选项框,选中并打开 Registry 页面,具体如下图所示:

在列表中找到 compiler.automake.allow.when.app.running,将该选项的 Value 勾选,用于指定 IDEA 工具在程序运行过程中自动编译,最后单击 Close 按钮完成设置。

3、使热部署生效

假如用 mvn spring-boot:run 方式启动应用,修改完java文件就会立即生效。

假如用 debug 方式启动应用,则需要手动重新编译整个项目,或者编译被修改的文件。比如点击 IDEA 菜单 Build > Build XXX / Recompile XXX

4、热部署效果测试

以 debug 模式启动项目,访问 http://localhost:8080/ 查看结果:

页面一开始输出的内容为“你好SpringBoot”:

为了测试配置的热部署是否有效,我们在不关闭项目的情况下将页面返回内容修改为“Hello SpringBoot”并保存,查看控制台信息会发现项目能够自动构建和编译,说明项目热部署生效,刷新页面:

可以看到,浏览器输出了“Hello SpringBoot”,说明项目热部署成功了。

总结

在本篇文章中,我们介绍了SpringBoot的基本概念,实现了一个简单的SpringBoot项目demo,并且介绍了其单元测试与热部署配置。

关于SpringBoot的知识还有很多,比如它的配置文件、原理及源码解析、数据访问、视图技术及缓存管理,在后面的文章中,我们会逐一进行讲解。