专栏首页用户5521492的专栏Spring Boot 与 MVC 的区别

Spring Boot 与 MVC 的区别

作者:潜龙勿用 www.zhihu.com/question/64671972

常常有读者问我,Spring、SpringMVC、SpringBoot 有啥区别?在我的理解中,我觉得 Spring 是基础,是核心;SpringMVC 是一个 MVC 框架,Javaweb 开发主流 MVC 框架就是它;而 SpringBoot 是一个快速整合其他框架的开发包。

Spring 框架就像一个家族,有众多衍生产品例如 boot、security、jpa等等。但他们的基础都是Spring 的 ioc 和 aop。ioc 提供了依赖注入的容器 aop ,解决了面向横切面的编程,然后在此两者的基础上实现了其他延伸产品的高级功能。

Spring MVC是基于 Servlet 的一个 MVC 框架 主要解决 WEB 开发的问题,因为 Spring 的配置非常复杂,各种XML、 JavaConfig、hin处理起来比较繁琐。于是为了简化开发者的使用,从而创造性地推出了Spring boot,约定优于配置,简化了spring的配置流程。

说得更简便一些:Spring 最初利用 “依赖注入”(DI)和 “切面编程”(AOP)解耦应用组件。大家觉得挺好用,于是按照这种模式搞了一个 MVC框架(一些用Spring 解耦的组件),用开发 web 应用( SpringMVC )。然后有发现每次开发都写很多样板代码,为了简化工作流程,于是开发出了一些“懒人整合包”(starter),这套就是 Spring Boot。

1、Spring MVC的功能

Spring MVC提供了一种轻度耦合的方式来开发web应用。

Spring MVC是Spring的一个模块,式一个web框架。通过Dispatcher Servlet, ModelAndView 和 View Resolver,开发web应用变得很容易。解决的问题领域是网站应用程序或者服务开发——URL路由、Session、模板引擎、静态Web资源等等。

2、Spring Boot的功能

Spring Boot实现了自动配置,降低了项目搭建的复杂度。

众所周知Spring框架需要进行大量的配置,Spring Boot引入自动配置的概念,让项目设置变得很容易。Spring Boot本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于Spring框架的应用程序。

也就是说,它并不是用来替代Spring的解决方案,而是和Spring框架紧密结合用于提升Spring开发者体验的工具。同时它集成了大量常用的第三方库配置(例如Jackson, JDBC, Mongo, Redis, Mail等等),Spring Boot应用中这些第三方库几乎可以零配置的开箱即用(out-of-the-box),大部分的Spring Boot应用都只需要非常少量的配置代码,开发者能够更加专注于业务逻辑。

Spring Boot只是承载者,辅助你简化项目搭建过程的。如果承载的是WEB项目,使用Spring MVC作为MVC框架,那么工作流程和你上面描述的是完全一样的,因为这部分工作是Spring MVC做的而不是Spring Boot。

对使用者来说,换用Spring Boot以后,项目初始化方法变了,配置文件变了,另外就是不需要单独安装Tomcat这类容器服务器了,maven打出jar包直接跑起来就是个网站,但你最核心的业务逻辑实现与业务流程实现没有任何变化。

所以,用最简练的语言概括就是:

  • Spring 是一个“引擎”;
  • Spring MVC 是基于Spring的一个 MVC 框架 ;
  • Spring Boot 是基于Spring4的条件注册的一套快速开发整合包。

推荐阅读:

1、java | 什么是动态代理

2、Spring 复盘(一) | IOC

3、Spring 复盘(二) | AOP

4、SpringBoot | 启动原理

5、SpringBoot | 自动配置原理

6、Spring MVC 复盘 | 工作原理及配置详解

本文分享自微信公众号 - 一个优秀的废人(feiren_java)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-05

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用Netty,我们到底在开发些什么?

    在java界,netty无疑是开发网络应用的拿手菜。你不需要太多关注复杂的nio模型和底层网络的细节,使用其丰富的接口,可以很容易的实现复杂的通讯功能。

    xjjdog
  • 为了学好Java,我尝试了这 6 个方法

    怎么学Java,一个简单的命题,我自己也折腾了好几年,现在虽不能说是Java高手,但也算是小有所成,至少还不至于搞不懂一些基本概念和技术原理。

    Java技术江湖
  • 聊聊nacos的HealthCheckCommon

    nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HealthChec...

    codecraft
  • 从网络图探寻基因互作的蛛丝马迹(3)

    前面两期(从网络图探寻基因互作的蛛丝马迹(1);从网络图探寻基因互作的蛛丝马迹(2))中我们给大家讲解了网络图的构造,以及构建蛋白互作网络的一个权威数据库:ST...

    用户6317549
  • Python3学习笔记 | 十六、Python的语句与语法-迭代器和解析(1)

    之前章节中,我们看到for语句可以Python任何序列类型,包括列表、元祖以及字符串。如下所示:

    TeamsSix
  • 干货 | Java8 新特性指导手册

    小伙伴们,Java 版本都到 12 啦,我发现还有很多小伙伴对 8 的新特性不是很了解。

    Java技术江湖
  • LWP进程资源耗尽,Resource temporarily unavailable

    服务器环境使用root账户运行应用程序是非常危险的,容易让人拿到shell变成肉鸡。所以有点意识的团队,都会建立一个低权限的普通用户用来运行java程序。

    xjjdog
  • 一篇文章讲清楚Java面向对象三大特性(基础篇)

    面向对象简称 OO(Object Oriented),20 世纪 80 年代以后,有了面向对象分析(OOA)、 面向对象设计(OOD)、面向对象程序设计(OOP...

    Java技术江湖
  • 在单台云主机搭伪分布式hadoop环境

    Hadoop是大数据的基础框架模型,处理大数据,不应只谈偏向业务环境的大数据(如超市买婴儿尿不湿同时还应该推荐啤酒的经典案例),作为解决方案经理,技术是不能缺少...

    希望的田野
  • 漏洞复现 | WordPress 4.2.0-4.5.1 flashmediaelement.swf 反射型 XSS

    首先来看存在漏洞的输出, 99%的Flash XSS都是由于ExternalInterface.call函数的参数注入导致的, 当然本次也不例外. 拿到源码之后...

    TeamsSix

扫码关注云+社区

领取腾讯云代金券