Spring spring

Spring中文网站 > Spring Cloud > Spring Boot和Spring Cloud的区别 Spring的单例模式是懒汉还是饿汉
Spring Boot和Spring Cloud的区别 Spring的单例模式是懒汉还是饿汉
发布时间:2026/06/30 15:29:39

品牌型号:联想ThinkPad X1

系统:Windows10家庭版

软件版本:Spring 5.3.7

用Spring Boot做过项目的人,多少都应该听说过Spring Cloud。但要理清楚Spring Boot和Spring Cloud两者的区别,很多人其实讲不太明白,甚至有人以为Spring Cloud只是Spring Boot的一个升级版。另外,在面试的时候,偶尔会被问到Spring里的单例Bean到底是懒汉式还是饿汉式,平时用的时候估计很多人也不太会去留意。这两个问题看着不相关,但都属于那种用了很久却没认真想过的知识点,下面就给大家介绍一下Spring Boot和Spring Cloud的区别,Spring的单例模式是懒汉还是饿汉的相关内容。

一、Spring Boot和Spring Cloud的区别

很多人以为Spring Cloud是Spring Boot的进阶版,学完Boot就该学Cloud,而且很多教程、机构都是这样的学习顺序,但其实这两者解决的根本不是同一层面的问题。

Spring Cloud
图1:Spring Cloud

Spring Boot的核心是简化单体应用的开发,内嵌Tomcat、依托自动配置和starter依赖,把以前繁琐的环境搭建都封装掉了,让我们专注写业务就行。简单来说Boot解决的是"怎么把一个应用快速跑起来"的问题。

Spring Boot启动类
图2:Spring Boot启动类

Spring Cloud针对的是分布式微服务场景。当系统从单体拆成几十个独立服务之后,服务发现、熔断降级、配置统一管理、请求路由这些都成了新麻烦,Spring Cloud整合Eureka、Feign、Gateway等组件,专门处理这些协调问题。

Feign远程接口
图3:Feign远程接口

两者的关系是Cloud依赖Boot来运行,Cloud里每个微服务本身就是一个Boot应用,Boot是基础,Cloud是建立在这之上的分布式治理方案。

Maven依赖层级
图4:Maven依赖层级

选型上也不用跟风,团队规模小、业务体量不大的话,Boot做单体应用完全够用,强行上微服务只会让维护成本翻倍。Cloud适合业务复杂、需要多团队并行开发的场景,搞清楚自己的实际需求再做决定就行。

二、Spring的单例模式是懒汉还是饿汉

这个问题在面试里经常会出现,但很多人答的时候容易混淆,或者只记得一个结论却说不清楚原因。Spring中的Bean默认是单例的,而且默认情况下是容器启动时就完成初始化,也就是饿汉式的加载方式。ApplicationContext在启动阶段会把所有单例Bean提前实例化好,放进容器里,后续用到的时候直接取,不需要再创建。这样做的好处是启动完成后就能提前发现配置错误,不至于等到运行时某个Bean第一次被用到才报错。

代码验证默认单例
图5:代码验证默认单例

如果我们不想让某个Bean在启动时就初始化,可以在类或者配置上加@Lazy注解,标记之后这个Bean会延迟到第一次被使用时才创建,也就是懒汉式。另外还有一种情况,Bean的作用域如果设置成prototype,那每次获取都会新建一个实例,跟单例就没关系了。

使用@Lazy修改为懒加载
图6:使用@Lazy修改为懒加载

所以准确的说法是,Spring单例Bean默认是饿汉式,但通过@Lazy可以切换成懒汉式,两种方式都支持,看实际需求来选择。日常开发里大多数Bean用默认方式就够了,只有初始化代价比较大、又不一定会被用到的场景,才值得考虑加@Lazy注解。

构造方法打印,看容器启动时是否打印
图7:构造方法打印,看容器启动时是否打印

以上就是Spring Boot和Spring Cloud的区别,Spring的单例模式是懒汉还是饿汉的全部内容了。Spring Boot和Spring Cloud解决的是不同层面的问题,一个让单体应用跑得更快更简单,一个解决微服务拆分后的协调难题,搞清楚这个边界,选型的时候就不容易跑偏。单例Bean这块也一样,默认饿汉、按需懒汉,背后的设计逻辑其实很清晰,理解了原理,面试被问到也不会答错。

180 1563 6924