spring boot 学习之路-1.0

张开发
2026/4/13 13:51:49 15 分钟阅读

分享文章

spring boot 学习之路-1.0
spring boot 是spring 的升级版这明显是不对的。下面直接上干货。SpringBoot 核心考点 三大框架区别Spring、Spring 与 SpringBoot 核心区别、SpringCloud 与 SpringBoot 核心区别?一、SpringBoot 常考内容核心SpringBoot不考偏门细节聚焦原理、核心特性、实战应用以下是必问考点1. 基础概念什么是 SpringBoot核心特性有哪些答SpringBoot 是简化 Spring 应用开发的脚手架核心特性自动配置、起步依赖、内嵌容器、零XML配置、开箱即用。SpringBoot 的优点简化配置、解决依赖冲突、快速开发、内嵌服务器、适配微服务。2. 自动配置原理考点SpringBootApplication注解拆解由SpringBootConfiguration配置类、EnableAutoConfiguration开启自动配置、ComponentScan包扫描三个核心注解组成。自动配置流程SpringBoot 启动时通过EnableAutoConfiguration读取META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件加载自动配置类结合Conditional系列条件注解按需自动配置Bean无需手动编写。3. 起步依赖 Starter什么是 StarterStarter 是依赖整合封装一个 Starter 包含当前场景所有依赖版本控制无需手动导包、解决版本冲突如spring-boot-starter-web整合了SpringMVC、Tomcat等所有Web依赖。Starter 原理Maven 依赖传递 自动配置。4. 启动流程SpringApplication.run()核心步骤初始化 SpringApplication 对象配置应用启动环境配置文件、环境变量创建 Spring 容器执行自动配置、加载Bean刷新容器启动内嵌服务器Tomcat/Jetty应用启动完成。5. 配置相关application.yml/properties区别答核心是语法格式、可读性和扩展性的区别重点记3点语法格式properties用赋值层级用.分隔如spring.datasource.urlyml用:赋值层级用缩进空格区分更简洁可读性yml层级清晰适合复杂配置如微服务多环境配置properties语法简单适合简单配置扩展性yml支持数组、集合、对象嵌套properties不支持直接嵌套需通过下标区分如user[0].name。配置文件优先级命令行 外部配置 内部配置 默认配置多环境切换spring.profiles.activeValue和ConfigurationProperties区别?答面试高频追问核心区别从5个维度记忆贴合实战场景注入方式Value只能单个注入如Value(${spring.datasource.url})ConfigurationProperties可批量注入指定前缀的配置如前缀spring.datasource自动注入url、username等所有相关配置类型转换Value需手动指定类型转换如日期、数组否则为字符串ConfigurationProperties自动完成类型转换无需手动处理校验支持Value不支持JSR380校验如NotNull、MinConfigurationProperties可结合Validated实现配置校验松散绑定Value不支持松散绑定如配置文件写spring.datasource.user-name注解中必须完全匹配ConfigurationProperties支持可写userName匹配配置文件的user-name适用场景Value适合单个、简单配置注入ConfigurationProperties适合批量、复杂配置如数据源、自定义配置类。6. 内嵌容器支持的容器Tomcat默认、Jetty、Undertow如何切换内嵌容器排除默认Tomcat依赖引入对应容器依赖。7. 注解 实战功能全局异常处理RestControllerAdviceExceptionHandler异步任务EnableAsyncAsync打包部署FatJar可执行Jar包java -jar直接运行监控Actuator 端点、SpringBoot Admin跨域解决方案、事务管理。8. Spring 中 Bean 的生命周期Bean 的生命周期是 Spring 核心基础必问核心分为4大阶段全程由 Spring 容器管理实例化InstantiationSpring 容器通过反射创建 Bean 实例无参构造器此时 Bean 仅为一个空对象未设置任何属性属性注入PopulateSpring 容器将配置好的属性依赖注入到 Bean 实例中完成依赖装配如Autowired注入初始化InitializationBean 实例化属性注入后执行初始化逻辑执行BeanNameAware、ApplicationContextAware等Aware接口方法获取容器相关信息执行PostConstruct注解标注的方法初始化前置执行InitializingBean接口的afterPropertiesSet()方法执行配置文件中init-method指定的自定义初始化方法销毁DestructionSpring 容器关闭时执行销毁逻辑执行PreDestroy注解标注的方法销毁前置执行DisposableBean接口的destroy()方法执行配置文件中destroy-method指定的自定义销毁方法总结实例化 → 属性注入 → 初始化 → 销毁核心记忆点空对象→填属性→做初始化→最后销毁。9. Spring 三级缓存重点三级缓存是什么核心定义Spring 三级缓存是 Spring 容器为了解决Bean 循环依赖如 A 依赖 BB 依赖 A而设计的缓存机制本质是三个 Map按优先级从高到低一级→三级一级缓存单例池singletonObjects存储完全初始化完成的单例 Bean直接供外部使用二级缓存早期暴露对象earlySingletonObjects存储实例化完成、未完成属性注入和初始化的单例 Bean用于临时暴露解决循环依赖三级缓存对象工厂singletonFactories存储Bean 工厂对象用于创建 Bean 实例的工厂延迟创建 Bean 实例避免提前初始化。为什么二级缓存不行核心追问核心原因无法解决“带代理的 Bean 循环依赖”具体逻辑如下总结二级缓存只能存储“固定对象”无法处理代理对象的延迟创建三级缓存通过工厂延迟生成代理对象既解决循环依赖又保证代理功能正常。Spring 中有些 Bean 需要生成代理对象如 AOP 增强代理对象的创建是在 Bean 初始化阶段完成的而非实例化阶段若只有二级缓存当出现循环依赖时只能暴露“未初始化的原始 Bean”而原始 Bean 还未生成代理对象此时注入的是原始 Bean而非代理 Bean会导致代理失效三级缓存的工厂对象singletonFactories可以延迟创建代理对象当循环依赖发生时通过工厂先获取“早期暴露的原始 Bean”在初始化阶段完成代理创建后再将代理对象放入二级缓存最终放入一级缓存确保注入的是代理 Bean保证 AOP 增强生效。二、Spring 与 SpringBoot 的核心区别关键纠正SpringBoot 绝对不是 Spring 的升级版SpringSpring Framework是Java 开发的核心底层框架提供 IOC、AOP、事务、SpringMVC 等核心能力SpringBoot是基于 Spring 生态的快速开发脚手架目的是简化 Spring 应用的开发、配置、部署。对比维度Spring (Framework)SpringBoot核心定位底层核心框架提供基础能力快速开发脚手架简化Spring使用配置方式繁琐XML配置 JavaConfig极简自动配置零XML依赖管理手动导包易出现版本冲突Starter起步依赖自动管理版本服务器必须手动配置外部Tomcat内嵌Tomcat/Jetty直接运行开发效率低配置量大、搭建工程慢高开箱即用几分钟搭建项目部署方式打War包部署到外部服务器打FatJar包java -jar一键运行适用场景所有Java企业级开发底层支撑快速构建单体应用、微服务应用三、SpringCloud 与 SpringBoot 的核心区别核心结论两者定位完全不同是互补关系不是替代关系SpringBoot开发单个应用的工具单体/微服务单个服务SpringCloud微服务架构的整套解决方案治理多个微服务依赖关系SpringCloud 必须基于 SpringBoot 构建。对比维度SpringBootSpringCloud核心定位单个应用的快速开发框架分布式微服务的治理生态解决问题简化单个Spring应用的配置、依赖、部署解决微服务集群的注册发现、配置中心、服务网关、熔断降级、链路追踪等依赖关系可独立使用必须依赖 SpringBoot核心组件自动配置、Starter、内嵌容器Nacos/Eureka注册中心、Gateway网关、Sentinel熔断、Feign远程调用等使用场景单体应用、微服务中的单个服务微服务集群、分布式系统总结Spring底层核心提供 IOC/AOP 等基础能力SpringBoot基于 Spring快速开发单个应用SpringCloud基于 SpringBoot微服务分布式治理三者关系Spring → SpringBoot简化开发→ SpringCloud微服务生态。

更多文章