这是我参与8月更文挑战的第10天,活动详情查看:8月更文挑战
上一篇文章中学习了SpringBoot的启动banner配置、自定义配置文件以及多环境下的配置文件,今天是要对SpringBoot与Spring MVC进行比较,并进一步理解SpringBoot的项目结构。
SpringBoot VS Spring MVC
在Web应用程序中,前后端通常会采用基于HTTP协议来完成请求和响应,开发过程包括URL地址的映射、HTTP请求的创建、数据的序列化和反序列话以及实现各个服务自身内部的业务逻辑。
基于Spring MVC的开发流程步骤
- 使用web.xml定义Spring的DispatcherServlet
- 配置启动Spring MVC的配置文件
- 编写响应HTTP请求的Controller控制器类
- 将服务部署到Tomcat服务器上
基于SpringBoot的开发流程步骤
- 使用
@SpringBootApplication注解创建服务启动类 - 编写响应HTTP请求的Controller控制器类
- 使用内置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组件即可引入相关模块框架使用。
如图中是引入了spring-boot-starter-web的组件信息,可以看出该组件内部包含了spring-web和spring-webmvc两个依赖信息,说明SpringBoot的底层任然是基于sping-web和spring-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主配置文件中进行具体配置信息的变更。