(十二) 2025年最新Spring Boot面试宝典(30+道含答案)

‍‌​​‌‌​‌​‍‌​​​‌‌​​‍‌​​​‌​‌​‍‌​​‌​​‌​‍‌​‌‌​‌‌‌‍‌​​‌‌​‌​‍‌​‌‌​‌​‌‍‌​‌​‌‌​‌‍‌​​‌‌‌​‌‍‌​​‌​‌‌‌‍‌​‌​‌‌​​‍‌​​​‌​‌​‍‌‌​​‌‌‌​‍‌​‌​‌​‌‌‍‌​​‌​​​​‍‌‌​​​‌‌‌‍‌​​‌‌​‌​‍‌​​‌​‌​​‍‌​​​‌​‌‌‍‌​​‌​​​‌‍‌​​‌‌‌​​

      在Java开发领域,Spring Boot无疑是近年来最热门的技术之一。它以其简洁、高效的特点,赢得了众多开发者的青睐。无论是初创公司还是大型企业,Spring Boot都成为了他们构建应用程序的首选框架。今天,我们就来聊聊Spring Boot面试中那些常见的问题,帮助你在面试中脱颖而出。

1. 什么是 Spring Boot?

   Spring Boot是Spring框架的子项目,旨在简化Spring应用程序的创建和配置过程。它提供了大量的starter依赖,使得开发者无需手动配置各种复杂的XML或Java配置文件,从而加快了开发速度。

2. 为什么要用 Spring Boot?

   Spring Boot的主要优势在于快速开发、配置简化、内嵌服务器容器(如Tomcat)、独立运行以及生产级监控等。这些特点使得开发者能够更专注于业务逻辑的实现,而无需过多关注基础设施的配置。

3. Spring Boot 与 Spring Cloud 区别?

    Spring Boot是一个快速开发的Spring框架,专注于简化单个应用的开发和部署。而Spring Cloud是一个基于Spring Boot的微服务框架,提供了服务发现、配置管理、熔断器等功能,用于构建分布式系统。Spring Cloud依赖于Spring Boot。

4. Spring Boot 如何加载外部配置文件?

   Spring Boot会自动加载application.properties或application.yml作为默认配置文件。如果需要加载其他配置文件,可以通过@PropertySource注解来实现。

5. Spring Boot 如何实现跨域请求?

    可以通过在@SpringBootApplication注解的类上使用@CrossOrigin注解,或者在Controller的方法上使用@CrossOrigin注解来实现跨域请求。

6. Spring Boot 的热部署是如何实现的?

    可以使用Spring Boot DevTools实现热部署,它支持类文件和资源文件的热部署。只需在pom.xml中添加spring-boot-devtools依赖即可。

7. Spring Boot 如何配置多数据源?

   可以通过@Primary注解设置主数据源,使用@Qualifier注解指定具体的数据源。每个数据源都需要配置一个@Bean,并使用@ConfigurationProperties注解来绑定配置属性。

8. Spring Boot 中如何实现 AOP?

   可以通过@Aspect注解定义切面,通过@Before、@After等注解定义通知。切面类需要使用@Component注解进行注册。

9. Spring Boot 中如何实现异步方法调用?

   可以使用@Async注解标注方法,使其成为异步方法。调用异步方法时,会返回一个CompletableFuture对象。

10. Spring Boot 如何处理异常?

   可以使用@ControllerAdvice注解定义全局异常处理类,使用@ExceptionHandler注解处理特定异常。这样可以集中处理所有Controller中的异常。

11. Spring Boot 的自动装配是什么?

   自动装配是Spring Boot的一项特性,通过@EnableAutoConfiguration和@ComponentScan自动加载符合条件的Bean。@SpringBootApplication注解就是@EnableAutoConfiguration和@ComponentScan的组合。

12. Spring Boot 如何实现消息队列?

    可以使用Spring Boot集成的消息队列中间件,如ActiveMQ、RabbitMQ,通过@EnableJms或@EnableRabbit注解开启相应功能。

13. Spring Boot 中如何使用定时任务?

  可以使用@Scheduled注解标注方法,定时执行任务。例如,@Scheduled(fixedRate = 10000)表示每10秒执行一次任务。

14. Spring Boot 的数据校验如何实现?

   可以使用@Valid和@Validated注解进行数据校验,结合BindingResult获取校验结果。如果校验失败,可以在Controller中捕获BindingResult对象,获取具体的校验错误信息。

15.@ComponentScan注解是干什么的?

被@ComponentScan修饰的java类,如果没有指定具体的扫描路径。实际上他默认的扫描路径是当前JAVA类所在的路径及其子路径,都是被扫描的范围。

16.bootstrap.yml的作用?

bootstrap.yml在SpringBoot中默认是不支持的,需要在SpringCloud环境下才支持,作用是在SpringBoot项目启动之前启动的一个父容器,该父容器可以在SpringBoot容器启动之前完成一些加载初始化的操作。比如加载配置中心中的信息。

17.SpringBoot如何解决跨域问题?

在Spring Boot中,解决跨域问题主要有以下几种方式:

1. 使用@CrossOrigin注解

可以在特定的控制器类或方法上添加@CrossOrigin注解,允许跨域访问。

2. 全局配置CORS

通过实现WebMvcConfigurer接口,重写addCorsMappings方法,可以全局配置跨域访问规则:这种方式适用于需要全局统一配置跨域访问规则的场景。

3. 使用CorsFilter

可以通过配置CorsFilter来实现跨域支持:这种方式同样适用于全局配置跨域访问。

4. 自定义Filter

如果需要更灵活的跨域配置,可以自定义Filter:后在Spring Boot中注册该Filter。

注意事项

  • 允许凭据时的限制:如果allowCredentials设置为true,则allowedOrigins不能使用*,必须指定具体的域名。
  • 重启服务:配置完成后,需要重启Spring Boot服务以使配置生效。

18.SpringBoot的优点?

  1. 1.简化开发与配置:秉持“约定大于配置”理念,大幅削减 XML 和 Java 配置代码,仅需 @SpringBootApplication 注解即可启动完整应用,省去手动配置 Spring 容器的繁琐步骤。
  2. 2.提升开发效率:集成众多常用依赖与功能,覆盖数据库、安全、监控等常见需求,开发者无需从零搭建环境,可直接聚焦于业务逻辑开发,显著加快应用系统开发进度。
  3. 3.独立运行:可将应用程序打包为独立的 JAR 或 WAR 文件,内含所有依赖与配置,简化了不同环境下的部署流程,应用可直接通过 java -jar 命令快速启动。
  4. 4.集成丰富生产级功能:内置性能监控、健康检查、分布式追踪等功能,为生产环境中的应用管理和运维提供有力支持,如通过 /actuator/health 端点轻松查看应用健康状态。
  5. 5.拥有强大生态系统:与 Spring Data、Spring Security、Spring Cloud 等众多流行框架和工具无缝集成,助力开发者轻松构建复杂且功能强大的应用系统。
  6. 6.天然契合微服务架构:为应对微服务架构下服务间灵活协作需求,提供与服务注册发现工具(如 Eureka)、分布式追踪(如 Sleuth 和 Zipkin)、断路器(如 Hystrix)等的集成支持。
  7. 7.内置嵌入式服务器:支持 Tomcat、Jetty、Undertow 等嵌入式服务器,无需单独安装与配置外部服务器,简化开发、测试流程,保证环境一致性。
  8. 8.提供内置监控与管理:借助 Actuator 模块,方便开发者获取应用健康状况、性能指标、线程池使用情况、缓存状态等信息,且可通过 HTTP 端点或 JMX 灵活访问。
  9. 9.兼容多语言及部署方式:除支持 Java 外,还兼容 Kotlin、Groovy 等语言,部署方式上支持传统 WAR 包、内嵌服务器以及与云服务、容器化技术(如 Docker)的集成。
  10. 10.开发工具助力高效开发:Spring Boot DevTools 提供热部署、应用自动重启、增强 IDE 集成等功能,显著提升开发效率,使开发者能够更快速地编写和调试代码。

19.Spring Boot、 Spring MVC 和 Spring 有什么区别?

1、Spring

Spring最重要的特征是依赖注入。所有 SpringModules 不是依赖注入就是 IOC 控制反转。当我们恰当的使用 DI 或者是 IOC 的时候,我们可以开发松耦合应用。松耦合应用的单元测试可以很容易的进行。

2、Spring MVC

Spring MVC 提供了一种分离式的方法来开发 Web 应用。通过运用像 DispatcherServelet,MoudlAndView 和 ViewResolver 等一些简单的概念,开发 Web 应用将会变的非常简单。

3、SpringBoot

Spring Boot 通过一个自动配置和启动的项来目解决需要大量配置文件问题。快捷构建产品就绪应用程序,Spring Boot 提供了一些非功能性特征。

20.RequestMapping 和 GetMapping 的不同之处?

RequestMapping 具有类属性的,可进行 GET,POST,PUT 或者其它请求方法。

GetMapping 是 GET 请求方法中的一个特例。

21.Spring Boot 需要独立的容器运行吗?

可以不需要,内置了 Tomcat/ Jetty 等容器

22.解 Spring Boot 中的 Starters如何理解?

它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成 Spring及其他技术,而不需要到处找示例代码和依赖包;并且带有默认配置,提高了开发效率;

23.Spring Boot 支持哪些日志框架?

支持 Java Util Logging, Log4j2, Lockback 作为日志框架,默认Lockback

24.SpringBoot 实现热部署方式?

1、Spring Loaded     2、Spring-boot-devtools

25.Spring Boot 的核心注解是哪个?

● @SpringBootConfiguration:

    组合了 @Configuration 注解,实现配置文件的功能。

● @EnableAutoConfiguration:

    打开自动配置的功能,也可以关闭某个自动配置的选项,

● @ComponentScan:Spring组件扫描

26.Spring Boot 兼容老 Spring 项目吗,如何做兼容?

可以兼容,使用 @ImportResource 注解导入老 Spring 项目配置文件。

27.如何在SpringBoot中实现定时任务?

1.一个就是使用 Spring 中的 @Scheduled 注解,

2.另一个则是使用第三方框架 Quartz。

28.Springboot中各个模块之间的功能?

Controller 模块:
处理 URL 请求和响应,将用户请求转发到相应服务

Service 模块:
包含业务逻辑代码,实现核心业务功能。

Repository 模块:
数据访问层,处理与数据库的交互。

Configuration 模块:
Spring 配置及 Bean 定义,管理应用的各个组件。

29.springboot常用的依赖包?

spring-boot-starter-web:提供构建 Web 应用所需的依赖。

spring-boot-starter-data-jpa:提供 JPA 数据访问支持,便于操作数据库。

spring-boot-starter-security:加入安全保护的依赖,提升应用安全性。

spring-boot-starter-test:测试环境所需的依赖,确保应用的稳定性。

30.Springboot中为什么不推荐使用@Autowired?

    Spring 官方推荐使用构造器注入,而不是字段注入。使用 @Autowired 会导致业务代码与 Spring 框架强绑定,如果换用其他 IOC 框架,代码可能不兼容。而 @Resource 是 Java 标准的一部分,如果必须使用字段注入,建议使用 @Resource。

31.springboot的启动流程

1. 启动 `main()` 方法

入口函数调用 `SpringApplication.run(主类.class, args)`,启动Spring Boot应用。

2. 创建 `SpringApplication` 对象

 推断应用类型(如Servlet、Reactive或普通应用)。通过SPI机制加载 SpringFactoriesLoader 中的初始化器(ApplicationContextInitializer)和监听器(ApplicationListener)。 确定主配置类(通过堆栈分析)。

3. 准备环境(ConfigurableEnvironment`)

加载配置文件(`application.properties`/`application.yml`)。

合并系统环境变量和命令行参数(优先级:命令行 > 系统变量 > 配置文件)。

4. 创建并刷新 ApplicationContext

据应用类型创建对应的上下文(如 AnnotationConfigServletWebServerApplicationContext)。

核心步骤:执行 AbstractApplicationContext.refresh(),完成以下操作:

加载 @Configuration 类、@ComponentScan 的Bean、自动配置类(@EnableAutoConfiguration)。

触发 BeanFactoryPostProcessor(如解析 @PropertySource)。

注册并实例化单例Bean,完成依赖注入(@Autowired)。

5. 启动嵌入式Web服务器

 在上下文刷新过程中,通过 `ServletWebServerFactory` 创建嵌入式容器(如Tomcat)。

- 注册 DispatcherServlet 和过滤器(Filter),完成Servlet容器的初始化。

6. 发布 ApplicationStartedEvent事件

通知监听器应用已启动(但此时部分Runner可能未执行)。

7. 执行 CommandLineRunner 和 ApplicationRunne

这两个接口的 `run()` 方法会在应用完全就绪前执行,常用于初始化任务

8. 发布 ApplicationReadyEvent` 事件

应用完全就绪,可接收外部请求或执行定时任务。

32.springboot配置文件加载的优先级?

1.命令行参数

2.JAR包外的 application-{profile}.properties

3.JAR包内的 application-{profile}.properties

4.JAR包外的 application.properties

5.JAR包内的 application.properties。

如果 application.properties 和 application.yml 同时存在,同样的参数,最终生效的是 application.properties 中的配置。

33.SpringBoot打成的jar和普通jar有什么区别?

Spring Boot 项目最终打包成的 jar:

1.可以直接执行,通过 java -jar xxx.jar 命令来运行

2.不可作为普通jar给别的项目引用即使依赖了也无法使用其中的类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值