Spring MVC 到 Spring BOOT的简化之路

背景

从Servlet技术到Spring和Spring MVC,开发Web应用变得越来越简捷。但是Spring和Spring MVC的众多配置有时却让人望而却步,相信有过Spring MVC开发经验的朋友能深刻体会到这一痛苦。因为即使是开发一个Hello-World的Web应用,都需要我们在pom文件中导入各种依赖,编写web.xml、spring.xml、springmvc.xml配置文件等。

特别是需要导入大量的jar包依赖时,我们需要在网上查找各种jar包资源,各个jar间可能存在着各种依赖关系,这时候又得下载其依赖的jar包,有时候jar包间还存在着严格的版本要求,,所以当我们只是想开发一个Hello-World的超简单的Web应用时,却把极大部分的时间在花在了编写配置文件和导入jar包依赖上,极大地影响了我们的开发效率。

所以为了简化Spring繁杂的配置,Spring Boot应运而生。正如Spring Boot的名称一样,一键启动,Spring Boot提供了自动配置功能,为我们提供了开箱即用的功能,使我们将重心放在业务逻辑的开发上。

那么Spring Boot又是怎么简化Spring MVC的呢?Spring Boot和Spring、Spring MVC间又是怎样的关系呢?Spring Boot又有什么新特点呢?

接下来,让我们走进Spring MVC 到Spring Boot的简化之路,或许你就能找到这些答案。

Spring vs Spring MVC vs Spring Boot

  • Spring Boot和Spring、Spring MVC不是竞争关系,Spring Boot使我们更加容易使用Spring和Spring MVC

Spring FrameWork

  • Spring FrameWork解决的核心问题是什么 Spring框架的最重要特性是依赖注入,所有的Spring模块的核心都是依赖注入(DI)或控制反转(IOC)。为什么很重要呢,因为当我们使用DI或IOC时,我们可以使应用得到解耦。我们来看一个简单的例子:

没有依赖注入的例子:

使用依赖注入的例子:

Spring 还能解决什么问题

1. 重复代码

Spring框架停止了依赖注入(DI)吗?没有,它在依赖注入(DI)的核心概念上开发了许多Spring模块:

  • Spring JDBC
  • Spring MVC
  • Spring AOP
  • Spring ORM
  • Spring Test
  • ... 考虑一下Spring JDBC,这些模块带来了新功能吗?并没有,我们完全可以使用Java代码完成这些工作。那么,它们给我们带来了什么?它们带来了简单的抽象,这些简单抽象的目的是:
  1. 减少样板代码/减少重复
  2. 促进解耦/增加单元可测性 例如:与传统的JDBC相比,我们使用Spring JDBC需要编写的代码减少了许多。

2. 与其他框架良好的集成

Spring框架并不尝试去解决已经解决了的问题,它所做的一切就是提供与提供出色解决方案的框架的完美集成。

  • Hibernate
  • IBatis
  • JUnit
  • ...

Spring MVC

  • Spring MVC框架解决的核心问题是什么 Spring MVC框架提供了开发Web应用的分离方式。通过DispatcherServlet、ModelAndView、View Resolver等简单概念,是Web应用开发变得更加简单。

为什么需要Spring Boot

基于Spring的应用程序有很多配置。当我们使用Spring MVC时,我们需要配置组件扫描,调度器servlet,视图解析器等:

Spring Boot解决的问题

1. Spring Boot 自动配置

Spring引入了新的思维过程:我们可以变得更加智能些吗?当一个spring mvc jar包被添加到应用程序时,我们是否可以自动配置一些bean?

  1. 当Hibernate jar包在类路径时,自动配置数据源怎样?
  2. 当Spring MVC jar包在类路径时,自动配置Dispatcher Servlet怎样?
  • Spring Boot查看ClASSPATH上对于本应用程序需要编写配置的框架,基于这些,Spring Boot提供了这些框架的基本配置-这就是自动配置。

2. Spring Boot Starter Projects

假设我们想开发一个Web应用程序。首先,我们需要确定我们想要使用的框架,使用哪个版本的框架以及如何将它们连接在一起。所有Web应用程序都有类似的需求 下面列出的是我们在Spring MVC中使用的一些依赖关系。这些包括Spring MVC,Jackson Databind(用于数据绑定),Hibernate-Validator(用于使用Java验证API的服务器端验证)和Log4j(用于日志记录)。在创建时,我们必须选择所有这些框架的兼容版本:

什么是Starter

我们来看Starter的一个示例 - Spring-Boot-Starter-Web

以下屏幕截图显示了添加到我们的应用程序中的不同依赖关系:

任何典型的Web应用程序都会使用所有这些依赖项.Spring Boot Starter Web预先打包了这些。作为开发人员,我们不需要担心这些依赖关系或兼容版本。

3. Spring Boot Starter项目选项

正如Spring Boot Starter Web一样,Starter项目帮助我们快速入门开发特定类型的应用程序:

  • spring-boot-starter-web-services - SOAP Web服务
  • spring-boot-starter-web - Web和RESTful应用程序
  • spring-boot-starter-test - 单元测试和集成测试
  • spring-boot-starter-data-jpa - 带有Hibernate的Spring Data JPA
  • spring-boot-starter-cache - 启用Spring Framework的缓存支持
  • ...

什么是Spring Boot 自动配置

前面已经初步介绍过,在这里详细介绍一下。 当我们启动Spring Boot应用程序时,我们可以在日志中看到一些重要的消息。

上面的日志语句显示了Spring Boot Auto Configuration的行为。

一当我们在应用中添加了Spring Boot Starter Web依赖,Spring Boot AutoConfiguration就会发现Spring MVC在类路径下,它会自动配置dispatcherServlet,一个默认的错误页面和webjars。 如果你添加了Spring Boot DataJPA Starter依赖,Spring Boot AutoConfiguration会自动配置数据源(datasource)和实体管理器(Entity Manager)

Spring Boot Auto Configuration在哪里实现

所有的自动配置逻辑都在spring-boot-autoconfigure.jar中实现。mvc、data和其他框架的所有自动配置逻辑都存在与一个jar包中。

spring-boot-autoconfigure.jar中重要的文件是/META-INF/spring.factories,该文件;列出了在EnableAutoConfiguration key下启动的所有自动配置类。下面列出一些重要的配置类:

查看自动配置

打开调试日志 在application.properties打开调试日志:

当启动程序时,会打印自动配置日志信息

总结

Spring Boot的出现本身就是为了减低Web开发的门槛,使开发人员能够专注于业务开发,而不需浪费时间在业务开发之外,至此Spring MVC到Spring Boot的简化之路到此结束。

作者:Beyondlcg

原文发布于微信公众号 - java思维导图(java-mindmap)

原文发表时间:2018-10-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Linyb极客之路

Spring Boot和Hazelcast使用

要将Hazelcast添加到Spring Boot应用程序,只需要两个依赖项。下我们需要配置Hazelcast实例。有两种方法可以做到这一点: 1. 通过Ja...

2182
来自专栏Python

linux每日命令(28):chgrp命令

在linux系统里,文件或目录的权限的掌控以拥有者及所属群组来管理。可以使用chgrp指令取变更文件与目录所属群组,这种方式采用群组名称或群组识别码都可以。Ch...

661
来自专栏Aloys的开发之路

彻底搞懂Gradle、Gradle Wrapper与Android Plugin for Gradle的区别和联系

首先用一段通俗易懂但是不是非常专业的话描述一下三者的概念、区别和联系。 Gradle是个构建系统,能够简化你的编译、打包、测试过程。熟悉Java的同学,可以把G...

2676
来自专栏Java技术栈

Intellij Idea乱码解决方案都在这里了

乱码场景 使用Intellij Idea经常遇到乱码问题,可以总结为以下几类乱码的场景。 1、工程代码乱码。 2、main方法运行,控制台乱码。 3、tomca...

3595
来自专栏Java学习资料

动力节点Java学习资料最火热的极速开发框架Spring Boot

Spring Boot是Spring家族中的一个全新的框架,它用来简化Spring应用程序的创建和开发过程,也可以说Spring Boot能简化我们之前采用Sp...

1125
来自专栏Java工程师日常干货

MyBatis+Spring MVC开发指南(三)

本系列的前面2篇文章,已经为大家介绍了MyBatis;从本篇博客开始将为大家介绍Spring MVC开发的那些事!关于Spring MVC这块将会涵盖Sprin...

871
来自专栏pangguoming

Activiti学习——Activiti与Spring集成

与Spring集成 基础准备 目录结构 ? 相关jar包 Activiti的相关jar包  Activiti依赖的相关jar包  Spring的相关jar包  ...

6856
来自专栏用户2442861的专栏

CMake 教程一

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/d...

3113
来自专栏运维技术迷

CentOS安装Redis、PHPredis扩展

安装Redis [root@qzdev9 conf]# yum -y install redis #安装redis [root@qzdev9 conf]# sy...

5158
来自专栏java工会

Spring MVC工作原理 及注解说明

1513

扫码关注云+社区

领取腾讯云代金券