13. spring boot

如果说 Spring 是那座造物工坊的骨架,那么 Spring Boot 就是直接给它装上了“核动力引擎与一键全自动驾驶系统”。过去在 Spring 里需要配置几百行 XML 或繁琐注解的苦日子一去不复返了。

面对这15个关于 Spring Boot 的核心面试题,让我们继续用最通俗易懂的语言来一网打尽!

第一部分:核心面试题极简通俗解答

1. 什么是 Spring Boot?它有哪些主要特点?

  • 通俗解答:Spring Boot 是 Spring 家族的“精装修懒人包”。它的核心口号是“约定大于配置”。最大特点是:不用搭繁琐的环境、内置服务器、开箱即用,让你几分钟就能跑起一个企业级 Web 应用。

2. Spring 与 Spring Boot 之间的区别

  • 通俗解答:

    • Spring:像买回家的毛坯建材与核心零件,需要你自己费时费力去拼装。

    • Spring Boot:像直接买了一辆配齐内饰的精装跑车,插钥匙就能开。Spring Boot 并不是底层换了新东西,而是把 Spring 玩法的繁琐配置全部自动化了。

3. Spring Boot 自动配置 (Auto Configuration)

  • 通俗解答:“心有灵犀的管家”。比如你在项目中引入了 MySQL 驱动依赖,Spring Boot 就会自动猜到你想连数据库,然后默默帮你把数据源和连接池全配置好,完全不用你操心。

4. @SpringBootApplication 有什么作用?

  • 通俗解答:这是启动类的“三合一超级大礼包注解”。它实际上悄悄合并了三个东西:

    1. 启动扫描(@ComponentScan)

    2. 自动配置启动(@EnableAutoConfiguration)

    3. 声明这是一个配置类(@SpringBootConfiguration)。

5. 在 Spring Boot 中排除特定的自动配置类

  • 通俗解答:万一 Spring Boot 的自动配置“好心办坏事”(比如它帮你配好了数据库,但你想用自己的特殊配置),你可以在启动类上加上 exclude 属性(如 @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})),明确拒绝它的好意。

6. Spring Boot Starters (启动器)

  • 通俗解答:“一站式套餐拼盘”。比如你想做 Web 开发,不需要挨个去找十几个散落的 jar 包,直接引入一个 spring-boot-starter-web,它就把所有相关的网络、JSON处理、内嵌服务器依赖一次性全给你打包下载好。

7. Spring Boot Starter Parent

  • 通俗解答:整个项目的“总家长/版本控制中心”。它帮你统一规定好了所有依赖组件的版本号(比如 JUnit 用哪个版本、Jackson 用哪个版本),彻底根治了不同插件版本打架的恶心问题。

8. @Bean 与 @Component 的区别

  • 通俗解答:

    • @Component:贴在你自己写的类上(比如 class MyService),告诉框架把这个类自动注册成 Bean。

    • @Bean:写在方法上(通常在配置类里),用来把一些第三方写好的类或者需要复杂组装的对象交由 Spring 管理。

9. Spring Boot 支持哪些嵌入式服务器?如何更改?

  • 通俗解答:默认内置的是 Tomcat,但也支持 Jetty 和 Undertow。如果想换成 Jetty,只需要在 Maven 里把 Tomcat 的依赖排除,然后把 Jetty 的 Starter 倒进去,重启服务器就自动切换了。

10. 什么是 Spring Boot DevTools?

  • 通俗解答:“热部署神器”。你在代码里改了一行字,保存的瞬间,程序会自动在后台快速重启刷新,不用你每次都手动点重启按钮,极大地提升了开发爽感。

11. 在 Spring Boot 中更改服务器端口和上下文路径

  • 通俗解答:在 application.properties 配置文件里写两行配置就行:

    • server.port=8081(把端口改成 8081)

    • server.servlet.context-path=/api(给所有接口加上统一的前缀路径)

12. 什么是 Spring Boot Actuator?

  • 通俗解答:“健康体检仪/监控仪表盘”。它会在后台默默收集服务器的各种指标(内存用了多少、CPU负载、数据库连没连上、各接口健康状态),通过暴露特殊的端点(如 /actuator/health),让运维随时知道系统死没死。

13. @Controller 与 @RestController 的区别

  • 通俗解答:

    • @Controller:传统网页控制器,默认返回值是跳转的页面模板文件。

    • @RestController:现代前后端分离神器,它相当于 @Controller + @ResponseBody,所有方法的返回值会自动变成纯 JSON 文本直接吐给前端。

14. @RequestParam 与 @PathVariable 的区别

  • 通俗解答:

    • @RequestParam:拿的是地址栏问号后面的参数(例如 /search?keyword=java 里的 keyword)。

    • @PathVariable:拿的是直接嵌在 URL 路径里的变量(例如 /users/{id} 里的 id)。

15. Spring Boot 中的全局异常处理流程

  • 通俗解答:不用在每个 Controller 里写丑陋的 try-catch。通过一个贴着 @ControllerAdvice 的全局异常拦截器,无论系统哪个角落抛出了什么错,它都会瞬间拦截,统一包装成优雅好看的 JSON 错误码再返回给前端。

第二部分:串联所有知识点的魔法大故事 —— 《魔法工会的自动化全自动战车》

想象你把过去的魔法造物工坊全面升级,开出了人类历史上第一辆Spring Boot 全自动魔法战车:

  1. Spring Boot 特点与对比:过去你需要买一堆零件自己拼(Spring),现在有了 Spring Boot 这辆精装修的超跑,一键启动,自带各种顶配。

  2. 自动配置与启动器 (Starters):

    • 你拉来了一个 spring-boot-starter-web 懒人套餐,战车瞬间具备了联网和网页交互能力。

    • 战车的自动配置引擎心有灵犀地帮你连好了数据库和缓存。如果有哪个配置不合心意,你用 exclude 明确拒绝它的特权。

  3. 总家长与组件魔法(@Bean vs @Component):

    • 整个项目的依赖版本由 Starter Parent(总家长) 统一统筹,再也不会发生版本冲突。

    • 你用 @Component 标记了自己写的魔法核心,又用 @Bean 把外来的神兵利器注册进了容器。

  4. 服务器切换与端口配置:战车默认开着 Tomcat 引擎,但你想换成更轻量的 Jetty 易如反掌。你随手在控制面板(配置文件)把端口改成了 8081,并加上了 /api 的通行路径。

  5. 开发与体检(DevTools 与 Actuator):

    • 程序员在车内疯狂改代码时,有 DevTools(热部署神器) 实时刷新。

    • 战车尾部挂着 Actuator(健康仪表盘),随时向工会大厅汇报战车的体温、内存和脉搏。

  6. Web 通信与全局救火(Controller 与异常处理):

    • 前端发来的请求通过 @PathVariable(路径变量) 和 @RequestParam(查询参数) 精准送达由 @RestController 掌控的指挥舱。

    • 万一中途遭遇敌袭发生崩溃,那套强大的全局异常处理流(@ControllerAdvice)会瞬间启动,平稳接管危机,给前端返回体面的错误提示。

看!从开箱即用的自动配置、Starter懒人包,到内嵌服务器、热部署、 Actuator 监控,再到高效的 Web 路由和全局异常拦截,Spring Boot 这辆现代化战车彻底把 Java 开发带入了“光速时代”!

posted @ 2026-10-11 02:54  漫漫长路</>  阅读(8)  评论(0)    收藏  举报