热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringMVC到SpringBOOT的简化之路

点击上方“方志朋”,选择“设为星标”回复”666“获取新整理的面试资料来源:juejin.impost5aa22d1f51882555677e2492背

点击上方“方志朋”,选择“设为星标”

回复”666“获取新整理的面试资料

来源:juejin.im/post/5aa22d1f51882555677e2492

  • 背景

  • Spring vs Spring MVC vs Spring Boot

    • Spring FrameWork

    • Spring 还能解决什么问题

    • Spring MVC

    • 为什么需要Spring Boot

  • 什么是Spring Boot 自动配置

    • Spring Boot Auto Configuration在哪里实现

    • 查看自动配置

  • 总结


背景

从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时,我们可以使应用得到解耦。我们来看一个简单的例子:

没有依赖注入的例子:

@RestController
public class WelcomeController {private WelcomeService service = new WelcomeService();@RequestMapping("/welcome")public String welcome() {return service.retrieveWelcomeMessage();}
}WelcomeService service = new WelcomeService(); 意味着WelcomeController类与WelcomeService类紧密结合在一起,耦合度高。

使用依赖注入的例子:

@Component
public class WelcomeService {//Bla Bla Bla
}@RestController
public class WelcomeController {@Autowiredprivate WelcomeService service;@RequestMapping("/welcome")public String welcome() {return service.retrieveWelcomeMessage();}
}依赖注入使世界看起来更简单,我们让Spring 框架做了辛勤的工作:
@Component:我们告诉Spring框架-嘿,这是一个你需要管理的bean
@Autowired:我们告诉Spring框架-嘿,找到这个特定类型的正确匹配并自动装入它

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,视图解析器等:

视图解析器配置:/WEB-INF/views/.jsp前端调度器的典型配置:dispatcherorg.springframework.web.servlet.DispatcherServletcontextConfigLocation/WEB-INF/todo-servlet.xml1dispatcher/当我们使用Hibernate / JPA时,我们需要配置一个数据源,一个实体管理器工厂,一个事务管理器以及许多其他事物:

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(用于日志记录)。在创建时,我们必须选择所有这些框架的兼容版本:

org.springframeworkspring-webmvc4.2.2.RELEASE
com.fasterxml.jackson.corejackson-databind2.5.3
org.hibernatehibernate-validator5.0.2.Final
log4jlog4j1.2.17

  • 什么是Starter

Starter是一套方便的依赖描述符,可以包含在应用程序中。
你可以获得所需的所有Spring及相关技术的一站式服务,而无需搜索示例代码并复制依赖描述符的粘贴负载。
例如,如果你想开始使用Spring和JPA来访问数据库,只需在你的项目中包含spring-boot-starter-data-jpa依赖项就好。

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

Spring-Boot-Starter-Web依赖:
org.springframework.bootspring-boot-starter-web

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

img

任何典型的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应用程序时,我们可以在日志中看到一些重要的消息。

Mapping servlet: 'dispatcherServlet' to [/]Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]

上面的日志语句显示了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包中。

img

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

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.MessageSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration,\
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\
org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration,\
org.springframework.boot.autoconfigure.security.SecurityFilterAutoConfiguration,\
org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration,\
org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration,\
org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration,\

查看自动配置

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

logging.level.org.springframework: DEBUG

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

总结

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

热门内容:   

  • GitHub 上有个沙雕开发者,做了款斗图工具后火了...

  • 大白话带你认识Kafka

  • 如何参与一个顶级开源项目    

  • 深入理解 Spring Cloud 核心组件与底层原理

  • 最强 Java Redis 客户端

  • 微服务 2.0 技术栈选型手册

  • 为什么魂斗罗只有128KB却可以实现那么长的剧情?

  • IDEA高级用法:集成JIRA、UML类图插件、SSH、FTP、Database管理...


最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

明天见(。・ω・。)ノ♡



推荐阅读
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • Ext JS MVC系列一:环境搭建与框架概览
    本文主要介绍了如何在项目中使用Ext JS 4作为前端框架,并详细讲解了Ext JS 4的MVC开发模式。文章将从项目目录结构、相关CSS和JS文件的引用以及MVC框架的整体认识三个方面进行总结。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • ssm关键步骤(2)
    spring:1.pom.xml中的文件配置org.springframework ... [详细]
  • Hibernate全自动全映射ORM框架,旨在消除sql,是一个持久层的ORM框架1)、基础概念DAO(DataAccessorOb ... [详细]
  • spring boot使用jetty无法启动 ... [详细]
  • ABP框架是ASP.NET Boilerplate的简称,它不仅是一个开源且文档丰富的应用程序框架,还提供了一套基于领域驱动设计(DDD)的最佳实践架构模型。本文将详细介绍ABP框架的特点、项目结构及其在Web API优先架构中的应用。 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 如何撰写适应变化的高效代码:策略与实践
    编写高质量且适应变化的代码是每位程序员的追求。优质代码的关键在于其可维护性和可扩展性。本文将从面向对象编程的角度出发,探讨实现这一目标的具体策略与实践方法,帮助开发者提升代码效率和灵活性。 ... [详细]
  • 深入解析Android中图像资源的内存占用问题及其优化策略
    在Android开发过程中,图像资源的内存占用是一个值得关注的问题。本文将探讨图像内存占用与哪些因素相关,包括设备性能的影响,并提供一系列优化策略,帮助开发者有效管理图像资源,提升应用性能。 ... [详细]
  • Android休眠唤醒机制
    有四种方式可以引起休眠①在wake_unlock()中,如果发现解锁以后没有任何其他的wakelock了,就开始休眠②在定时器到时间以后,定时器的回调函 ... [详细]
author-avatar
美煤MM就
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有