Spring 框架就像一个大家族,有众多衍生产品,例如 Boot、Security、JPA 等等,但他们的基础都是 Spring 的 IOC 和 AOP。IOC 提供了依赖注入的容器,AOP 解决了面向切面的编程;然后在此二者的基础上实现了其他延伸产品的高级功能。
Spring MVC 是 Spring 中的一个很重要的模块,是基于 Servlet 的一个 MVC 框架,主要赋予 Spring 快速构建 MVC 架构的 Web 程序开发的能力。MVC 是模型(Model)、视图(View)、控制器(Controller)的简写,其核心思想是通过将业务逻辑、数据、显示分离来组织代码。但是使用 Spring 进行开发时各种配置过于麻烦,比如开启某些 Spring 特性时,需要用 XML 或 Java 进行显式配置。于是,Spring Boot 诞生了!
Spring Boot 的诞生旨在简化 Spring 的开发,比如减少各种配置文件的开发。
简单来说就是:Spring 最初利用“工厂模式”(DI)和“代理模式”(AOP)解耦应用组件。大家觉得挺好用,于是按照这种模式搞了一个 MVC 框架(一些用 Spring 解耦的组件),用来开发 web 应用程序,最终形成了 SpringMVC。然后有、又发现每次开发都需要写很多样板代码,为了简化工作流程,于是开发出了一些“懒人整合包”(比如starter),这套就是 Spring BOOT。
Spring MVC 的功能
Spring MVC 提供了一种轻度耦合的方式来开发 web 应用程序。
Spring MVC 是 Spring 的一个模块,一个 web 框架。通过 Dispatcher Servlet、ModelAndView 和 View Resolver 来使得开发 web 应用程序变得很容易。解决的问题领域是网站应用程序或者服务开发——URL 路由、Session、模板引擎、静态 Web 资源等等。
Spring BOOT的功能
Spring Boot实现了自动配置,降低了项目搭建的复杂度。Spring Boot 引入自动配置的概念,让项目配置变得很容易。Spring Boot 本身并不提供 Spring 框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于 Spring 框架的应用程序。也就是说,它并不是用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提升 Spring 开发者体验的工具。同时它集成了大量常用的第三方库配置(例如,Jackson, JDBC, Mongo, Redis, Mail等等),Spring Boot 应用中这些第三方库几乎可以零配置的开箱即用(out-of-the-box),大部分的 Spring Boo t应用都只需要非常少量的配置代码,使开发者能够更加专注于业务逻辑。
对使用者来说,换用 Spring Boot 以后,项目初始化方法变了,配置文件变了,另外就是不需要单独安装 Tomcat 这类容器服务器了,maven 打出 jar 包直接跑起来就是个网站,但是最核心的业务逻辑实现与业务流程实现没有任何变化。
Spring 是一个“引擎”;Spring MVC 是基于 Spring 的一个 MVC 框架 ;Spring Boot 是基于Spring4 的条件注册的一套快速开发整合包。
什么是Spring?它解决了什么问题?
我们平时说的 Spring,一般指代的是 Spring Framework,它是一个开源的应用程序框架,提供了一个简易的开发方式,通过这种开发方式,将避免那些可能致使代码变得繁杂混乱的大量的业务/工具对象,说的更通俗一点就是由框架来帮你管理这些对象,包括它的创建,销毁等,比如基于 Spring 的项目里经常能看到的 Bean,它代表的就是由 Spring 管辖的对象。
什么是Spring MVC?它解决了什么问题?
Spring MVC 是 Spring 的一部分,Spring 出来以后,大家觉得很好用,于是按照这种模式设计了一个 MVC 框架(一些用 Spring 解耦的组件),主要用于开发WEB应用和网络接口,它是Spring的一个模块,通过 Dispatcher Servlet, ModelAndView 和 View Resolver,让应用开发变得很容易。
什么是Spring Boot?它解决了什么问题?
初期的 Spring 通过代码加配置文件的形式为项目提供了良好的灵活性和扩展性,但随着 Spring 越来越庞大,其配置文件也越来越繁琐,太多复杂的 xml 文件也一直是 Spring 被人诟病的地方,特别是近些年其他简洁的 WEB 方案层出不穷,如基于 Python 或 Node.Js,几行代码就能实现一个 WEB 服务器,对比起来,大家渐渐觉得 Spring 那一套太过繁琐,此时,Spring 社区推出了 Spring Boot,它的目的在于实现自动配置,降低项目搭建的复杂度,如需要搭建一个接口服务,通过 Spring Boot,引入响应的依赖,便可很轻易的实现:
//引入spring-boot-starter-web依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
//声明Spring Boot应用,直接写业务逻辑即可
@Controller
@SpringBootApplication
public class MockServerApplication {
@RequestMapping("/helloWorld")
@ResponseBody
String HelloWorld() {
return "HelloWorld";
}
public static void main(String[] args) {
SpringApplication.run(MockServerApplication.class, args);
}
}
甚至都不用额外的 WEB 容器,直接生成 jar 包执行即可,因为 spring-boot-starter-web 模块中包含有一个内置 tomcat,可以直接提供容器使用;基于 Spring Boot 并不是说原来的配置没有了,而是 Spring Boot 有一套默认配置,我们可以把它看做比较通用的约定,而 Spring Boot 遵循的也是约定大于配置原则,同时,如果你需要使用到 Spring 以往提供的各种复杂但功能强大的配置功能,Spring Boot 一样支持。
在 Spring Boot 中,你引入的所有包都是各种 starter 形式,如:
spring-boot-starter-web-services
,针对 SOAP Web Services
spring-boot-starter-web
,针对 Web 应用与网络接口
spring-boot-starter-jdbc
,针对 JDBC
spring-boot-starter-data-jpa
,基于 hibernate 的持久层框架
spring-boot-starter-cache
,针对缓存支持
Spring,Spring MVC,Spring Boot 三者比较
这三者专注的领域不同,解决的问题也不一样。总的来说,Spring 就像一个大家族,有众多衍生产品,例如 Boot,Security,JPA 等等。但他们的基础都是 Spring 的 IOC 和 AOP,IOC 提供了依赖注入的容器,而 AOP 则解决了面向切面的编程,然后在此两者的基础上实现了其他衍生产品的高级功能;Spring MVC 是基于 Servlet 的一个 MVC 框架,主要解决 WEB 开发的问题,因为 Spring 的配置非常复杂,各种 xml,properties 处理起来比较繁琐。于是为了简化开发者的使用,Spring 社区创造性地推出了 Spring Boot,它遵循约定优于配置,极大降低了 Spring 使用门槛,但又不失 Spring 原本灵活强大的功能。
总结来说就是:Spring MVC 和 Spring Boot 都属于 Spring 的产品,Spring MVC 是基于 Spring 的一个 MVC 框架,而 Spring Boot 是基于 Spring 的一套快速开发整合包。
本文参考自:Spring、Spring Boot与Spring MVC - 掘金