SpringBoot学习(三)

163 阅读3分钟

这是我参与8月更文挑战的第10天,活动详情查看:8月更文挑战

上一篇文章中学习了SpringBoot的启动banner配置、自定义配置文件以及多环境下的配置文件,今天是要对SpringBoot与Spring MVC进行比较,并进一步理解SpringBoot的项目结构。

SpringBoot VS Spring MVC

在Web应用程序中,前后端通常会采用基于HTTP协议来完成请求和响应,开发过程包括URL地址的映射、HTTP请求的创建、数据的序列化和反序列话以及实现各个服务自身内部的业务逻辑。

基于Spring MVC的开发流程步骤

  1. 使用web.xml定义Spring的DispatcherServlet
  2. 配置启动Spring MVC的配置文件
  3. 编写响应HTTP请求的Controller控制器类
  4. 将服务部署到Tomcat服务器上

基于SpringBoot的开发流程步骤

  1. 使用@SpringBootApplication注解创建服务启动类
  2. 编写响应HTTP请求的Controller控制器类
  3. 使用内置Tomcat服务器独立运行服务并启动服务监控

SpringBoot特性

  • 减少不必要的配置:SpringBoot将Spring中基于XML的配置方式转换为Java Config,同时提供了.yml来优化原来的.properties和.xml文件配置方案。
  • 启动依赖的自动管理;SpringBoot基于自动配置特性,将常用工具和框架封装为starter组件,只需要在Maven的pom.xml文件中添加相关依赖就可以引入功能模块。
  • 简化部署:SpringBoot内嵌了HTTP容器,使用Maven统一管理其他第三方依赖,将项目打包为Jar进行独立部署。
  • 提供应用监控:SpringBoot基于Actuator组件,可以对应用程序的当前运行状态进行监控和报警,分析JVM性能指标等。

SpringBoot项目结构

Maven依赖

使用SpringBoot创建Web项目时,只需要在pom.xml文件中引入web的starter组件即可引入相关模块框架使用。

image.png

如图中是引入了spring-boot-starter-web的组件信息,可以看出该组件内部包含了spring-webspring-webmvc两个依赖信息,说明SpringBoot的底层任然是基于sping-webspring-webmvc组件来完成对Web请求响应流程的创建。

SpringBoot启动类

import ...

@SpringBootApplication
public class HelloApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

SpringBoot项目下,添加了@SpringBootApplication注解的类作为整个项目的入口类,执行当前类在启动Spring容器的同时,会自动化扫描项目代码包结构下的@Component@Service@Repository@Controller等注解并将注解对应类作为Bean对象加载到Spring容器中。

Controller控制类

import ...

@RestController
@RequestMapping(value = "demo")
public class HelloController {
 
    @GetMapping(value = "/{hello}")
    public String getHello(@PathVariable("name") String name) {
        return "hello" + name;
    }
}

SpringBoot中的控制类与Spring MVC中的控制类形式上基本一致。

  • 注解@RestController相当于是传统Spring MVC中@Controller注解和@ResponseEntity注解的整合,会自动使用JSON实现序列化和反序列化操作。
  • 注解@RequestMapping用来指定请求地址的映射关系。
  • 注解@GetMapping即是用来指定Get请求的@RequestMapping注解。

application.yml配置文件

SpringBoot提供了强大的自动配置机制,若没有特殊的配置需求,则可以基于SpringBoot内置配置进行集成和开发。而如果需要对相关配置进行自定义,则可以在src/main/resources/application.yml主配置文件中进行具体配置信息的变更。