spring 家族Spring、SpringMVC、SpringBoot、SpringCloud

本文深入解析Spring框架家族,包括Spring、SpringMVC、SpringBoot和SpringCloud的核心概念、功能及相互间的关系。探讨了控制反转(IoC)、面向切面(AOP)等关键特性,以及各框架如何简化开发流程,提升开发效率。

一、spring和springMvc:

spring是一个一站式的轻量级的java开发框架,核心是控制反转(IOC)和面向切面(AOP),针对于开发的WEB层(springMvc)、业务层(Ioc)、持久层(jdbcTemplate)等都提供了多种配置解决方案;

springMvc是spring基础之上的一个MVC框架,主要处理web开发的路径映射和视图渲染,属于spring框架中WEB层开发的一部分;

二、springMvc和springBoot:

springMvc属于一个企业WEB开发的MVC框架,涵盖面包括前端视图开发、文件配置、后台接口逻辑开发等,XML、config等配置相对比较繁琐复杂;

springBoot框架相对于springMvc框架来说,更专注于开发微服务后台接口,不开发前端视图;

三、springBoot和springCloud:

spring boot使用了默认大于配置的理念,集成了快速开发的spring多个插件,同时自动过滤不需要配置的多余的插件,简化了项目的开发配置流程,一定程度上取消xml配置,是一套快速配置开发的脚手架,能快速开发单个微服务;

spring cloud大部分的功能插件都是基于springBoot去实现的,springCloud关注于全局的微服务整合和管理,将多个springBoot单体微服务进行整合以及管理;  springCloud依赖于springBoot开发,而springBoot可以独立开发;

总结:
1. Spring 框架就像一个家族,有众多衍生产品例如 boot、security、jpa等等。但他们的基础都是Spring的ioc、aop等. ioc 提供了依赖注入的容器, aop解决了面向横切面编程,然后在此两者的基础上实现了其他延伸产品的高级功能;
2. springMvc是基于Servlet 的一个MVC框架主要解决WEB开发的问题,因为Spring的配置非常复杂,各种XML、JavaConfig、servlet处理起来比较繁琐;
3. 为了简化开发者的使用,从而创造性地推出了springBoot框架,默认优于配置,简化了springMvc的配置流程;
但区别于springMvc的是,springBoot专注于微服务方面的接口开发,和前端解耦,虽然springBoot也可以做成springMvc前后台一起开发,但是这就有点不符合springBoot框架的初衷了;
4. 对于springCloud框架来说,它和springBoot一样,注重的是微服务的开发,但是springCloud更关注的是全局微服务的整合和管理,相当于管理多个springBoot框架的单体微服务;

1.控制反转(IoC)

所谓控制反转,就是一个对象的使用不再是手动创建,而是被动的被传递 进来。这么做的好处就在于--解耦,尤其是面对接口编程时。

# 老的写法
public boolean sendMsg(String msg){
MsgServicemsgService = new MsgServiceImpl();
return msgService.sendMsg(msg);}
# 有IoC后的写法
@Autowired MsgServicemsgService;
public boolean sendMsg(String msg){
return msgService.sendMsg(msg);}

看起来相差不大,但IoC更加的有利于代码的解耦。使用IoC后就由老的面向对象编程变成了面向接口编程,我在使用MsgService 的时候,他的实际实现是对我屏蔽的。这对解耦、拓展、维护是一个很好的基础。我要更改sendMsg的逻辑,只需再提供一个新的该接口的实现替换上就好,其他调用的地方都无需改动。JDBC驱动其实就是这个道理,提供接口规范,各个厂家提供实现就好。

2.面向切面(AOP)

        AOP使程序猿更加关注主体业务的开发,一些公共的可抽象的业务比如日志、事务等,在编码时都无须额外关注。这样能更好的实现单一原则、高内聚。

SpringMVC

SpringMVC是在Spring的一部分,是一个WEB开发框架。

MVC指的就是MVC设计模式,Model、View、Controller。具体是什么我也不赘述了。

SpringMVC的工作流程简单来说是这样的:

1.DispatcherServlet

是SpringMVC的核心Servlet,字面意思理解,他起着调度的作用。

2.HandlerMapping

DispatcherServlet通过HandlerMapping得到该URI对应的Controller信息。

3.HandlerAdapter

拿到Controller信息后,通过HandlerAdapter调用Controller。

4.Controller

该URI的业务逻辑,完成后返回给HandlerAdapter->HandlerAdapter。

5.ViewResolver

得到Controller的返回数据后,DispatcherServlet通过ViewResolver得到相应的View。

6.View

得到View后,用Model的数据进行渲染,包装到Response中返回给前端。

(1)Spring MVC是Spring提供的一个强大而灵活的模块式web框架。通过Dispatcher Servlet, ModelAndView 和 View Resolver,开发web应用变得很容易。
(2)SpringMVC是一种基于Java的以请求为驱动类型的轻量级Web框架,其目的是将Web层进行解耦,即使用“请求-响应”模型,从工程结构上实现良好的分层,区分职责,简化Web开发。借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单。这些控制器一般不直接处理请求,而是将其委托给Spring上下文中的其他bean,通过Spring的依赖注入功能,这些bean被注入到控制器中。
(3)Spring框架最核心的就是所谓的依赖注射和控制反转。完全解耦类之间的依赖关系,一个类如果要依赖什么,那就是一个接口。至于如何实现这个接口,这都不重要了。只要拿到一个实现了这个接口的类,就可以轻松的通过xml配置文件把实现类注射到调用接口的那个类里。所有类之间的这种依赖关系就完全通过配置文件的方式替代了。
SpringMVC的优点:
(1)使用简单,学习成本低。
(2)很容易就可以写出性能优秀的程序.
(3)灵活性强,Spring MVC的框架易扩展
SpringMVC的缺点:
(1)Spring与MVC 的Servlet API 耦合,难以脱离容器独立运行
(2)太过于细分,开发效率低
(3)过度追求完美,有过度设计的危险

解决的问题领域是:网站应用程序或者服务开发——URL路由、Session、模板引擎、静态Web资源等等。

SpringBoot

是基于Spring的扩展,主要是简化了大量的配置工作。以约定优于配置、开箱即用策略,提供了一个可以快速搭建应用的框架。

目前开发中基本上都用的是SpringBoot,Spring的XML啊什么的早就忘记了。

SpringCloud

是在微服务热潮下快速发展的一个框架,但我更喜欢称他为微服务解决方案。他是的基础是SpringBoot,提供了微服务架构下的各个组件的集成序列(负载均衡、容灾、服务治理等等)。

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框架,那么工作流程和SpringMVC的是完全一样的,因为这部分工作是Spring MVC做的而不是Spring Boot。
Spring Boot的核心功能:
(1)独立运行的Spring项目
Spring Boot可以以jar包的形式进行独立的运行,使用:java -jar xx.jar 就可以成功的运行项目,或者在应用项目的主程序中运行main函数即可;
(2)内嵌的Servlet容器
内嵌容器,使得我们可以执行运行项目的主程序main函数,并让项目的快速运行;
(3)提供starter简化Manen配置
Spring Boot提供了一系列的starter pom用来简化我们的Maven依赖
(4)自动配置Spring
Spring Boot会根据我们项目中类路径的jar包/类,为jar包的类进行自动配置Bean,这样一来就大大的简化了我们的配置。当然,这只是Spring考虑到的大多数的使用场景,在一些特殊情况,我们还需要自定义自动配置;
(5)应用监控
Spring Boot提供了基于http、ssh、telnet对运行时的项目进行监控;

springboot 要解决的问题:
1.如何精简配置;如何让编码、部署、监控变简单;
2.如何方便的让spring生态圈和其他工具链整合
优点:
对新手来说,无需任何门槛,只要懂Maven[的新手]会看文档就能亦步亦趋的开始一个新项目;
对高手来说,改配置也是分分钟的事。另外fat jar的打包方式让部署方式变得优雅。
缺点:
就是简单的背后蕴藏了巨大的学习曲线。入门容易,但是如果没有完整学习spring的体系,碰到问题就一脸懵逼。如果没有一定的经验,根本就不知道springboot自动做了什么。
SpingMVC与SpringBoot的联系与区别:
联系:
Spring 最初利用“工厂模式”( DI )和“代理模式”( AOP )解耦应用组件。按照这种模式搞了一个 MVC 框架(一些用 Spring 解耦的组件),用开发 web 应用( SpringMVC )。后来发现每次开发都要搞很多依赖,写很多样板代码,使代码臃肿而麻烦,于是聪明的前人整理了一些懒人整合包( starter ),这套就是 Spring Boot 。
区别:
Spring MVC 是基于 Servlet 的一个 MVC框架 主要解决 WEB 开发的问题 但关于Spring 的配置比较 ;而Spring boot 的原则是:约定优于配置 ,可以极大地简化了 spring 的配置流程。

 

<think>嗯,用户想了解Spring家族中四个核心项目的区别与联系——SpringSpringMVCSpringBootSpringCloud。这个问题其实很典型,很多Java开发者初期都会混淆这些概念。翻看之前的引用材料,用户提供的两篇参考文章质量不错。引用1直接点明这是四个独立项目但同属Spring家族,而引用2里详细解释了SpringBoot的"约定优于配置"特性,还特别说明了自动装配机制。这些内容正好能用来构建系统的对比框架。用户可能正在学习Spring生态体系,或者需要为技术选型做调研。ta的提问方式很清晰,说明有一定技术基础但需要体系化的梳理。考虑到Spring技术栈的复杂性,我需要把抽象概念和实际应用场景结合起来说明。先从基础组件开始:SpringFramework是地基,提供IOC和AOP等基础设施。SpringMVC作为Web层解决方案构建在这之上,处理HTTP请求响应。而SpringBoot通过自动化配置把前两者打包成开箱即用的开发体验——就像预制房屋组件,开发者不用再操心钉子该钉在哪里。最高层的SpringCloud则用这些组件搭建分布式系统,解决微服务架构特有的问题。特别要注意的是,这些技术不是互斥关系而是叠加关系。比如一个SpringCloud微服务必定会同时使用SpringBootSpringMVC。在解释时要避免让用户产生"四选一"的误解。最后准备的问题既要覆盖技术原理(如自动装配机制),也要考虑实用场景(比如技术选型依据)。用户看起来是好学深思的类型,这类深度问题应该正合ta心意。</think> 以下基于核心框架的定位与协作关系,系统梳理Spring生态中四大项目的区别与联系: --- ### **1. Spring Framework** **定位**:基础框架(基石) **核心功能**: - **IoC容器**:管理对象生命周期与依赖注入 - **AOP支持**:实现横切关注点(日志、事务等) - **数据访问**:JDBC、ORM集成模板(如`JdbcTemplate`) **场景**:企业级Java应用的通用解决方案 --- ### **2. Spring MVC** **定位**:Spring Framework的**Web层扩展** **核心功能**: - **MVC架构**:分离Model、View、Controller - **请求处理**:通过`DispatcherServlet`路由HTTP请求 - **视图解析**:支持JSP、Thymeleaf等模板引擎 **关系**: - 依赖Spring Framework(如IoC容器管理Controller) --- ### **3. Spring Boot** **定位**:**快速开发脚手架**(解决Spring配置痛点) **核心创新**: - **约定优于配置** - 自动依赖管理:`Starter`包(如`spring-boot-starter-web`) - 嵌入式容器:默认集成Tomcat(无需独立部署) - **自动装配** - 通过`@EnableAutoConfiguration`加载`META-INF/spring.factories` - 条件化Bean注册(如`@ConditionalOnClass`) **优势**: > "减少传统Spring繁琐配置,使开发者聚焦业务逻辑"[^2] --- ### **4. Spring Cloud** **定位**:**分布式系统全家桶** **核心能力**: - **微服务治理**:服务发现(Eureka)、配置中心(Config) - **容错机制**:熔断(Hystrix)、负载均衡(Ribbon) - **网关路由**:Spring Cloud Gateway **协作关系**: - 构建于Spring Boot之上,依赖其**快速启动**和**自动装配**特性 - 整合Netflix OSS等组件,提供分布式解决方案 --- ### **关键区别总结** | **项目** | 核心目标 | 依赖关系 | 典型应用场景 | |----------------|--------------------------|----------------------------|--------------------------| | Spring | 提供企业级基础设施 | 无 | 通用Java后端应用 | | Spring MVC | 实现Web层MVC架构 | 依赖Spring Framework | 传统Web应用开发 | | Spring Boot | 简化配置、快速启动 | 依赖Spring Framework | 微服务单体模块/独立应用 | | Spring Cloud | 构建分布式系统 | 依赖Spring Boot | 微服务集群治理 | > **类比理解**: > - `Spring` ≈ 地基与钢筋 > - `Spring MVC` ≈ 房屋的窗户与门(特定功能模块) > - `Spring Boot` ≈ 预制房屋(拎包入住) > - `Spring Cloud` ≈ 城市级社区规划(多房屋协作)[^1] --- ### **典型协作流程** ```mermaid graph LR A[Spring Framework] -->|提供核心容器| B(Spring Boot) B -->|简化配置| C[Spring MVC] B -->|启动基础| D[Spring Cloud] D -->|分布式扩展| E[微服务集群] ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值