1. 概述

本文整理了Spring框架相关的核心面试题,帮助开发者快速掌握高频考点。所有内容均基于实际开发经验整理,避免生硬翻译。

2. Spring核心

Q15. 什么是Spring Security?

Spring Security是Spring框架的独立模块,专注于为Java应用提供认证和授权功能。它还能防御常见安全漏洞(如CSRF攻击)。在Web应用中,通过@EnableWebSecurity注解即可快速启用。

✅ 推荐阅读:Spring安全系列文章

Q16. 什么是Spring Boot?

Spring Boot通过预配置框架集减少样板代码,实现最小化配置启动Spring应用。简单粗暴说:它让开发者专注业务逻辑而非环境配置。

Q17. Spring框架使用了哪些设计模式?

设计模式 应用场景
单例模式 单例作用域Bean
工厂模式 BeanFactory类
原型模式 原型作用域Bean
适配器模式 Spring Web/MVC
代理模式 AOP支持
模板方法 JdbcTemplate等
前端控制器 DispatcherServlet
数据访问对象 DAO支持
MVC模式 Spring MVC

Q18. 原型作用域如何工作?

原型作用域(prototype)意味着每次请求Bean时,Spring都会创建新实例返回。这与默认单例作用域(整个IoC容器只有一个实例)形成鲜明对比。

3. Spring Web MVC

Q19. 如何在Spring Bean中获取ServletContext和ServletConfig?

两种实现方式:

  1. 实现Aware接口(完整列表见这里
  2. 直接注入: ```java @Autowired ServletContext servletContext;

@Autowired ServletConfig servletConfig;


#### Q20. Spring MVC中的Controller是什么?
所有由`DispatcherServlet`处理的请求都会被转发到带`@Controller`注解的类。每个控制器类将一个或多个请求映射到处理方法,执行业务逻辑。

> ⚠️ 建议先理解[前端控制器模式](https://example.com/spring-controllers)

#### Q21. @RequestMapping注解如何工作?
`@RequestMapping`将Web请求映射到控制器方法,支持:
- HTTP头映射
- URI路径变量(`@PathVariable`)
- 请求参数(`@RequestParam`)

> 🔍 详细用法参考:[RequestMapping详解](https://example.com/spring-requestmapping)

> 📚 更多MVC问题见:[Spring MVC面试题集锦](https://example.com/spring-mvc-interview-questions)

### 4. Spring数据访问

#### Q22. 什么是Spring JdbcTemplate?如何使用?
JdbcTemplate是Spring JDBC的核心API,封装了:
- 连接创建/关闭
- 语句执行和存储过程调用
- ResultSet遍历和结果返回

**配置示例**:
```java
@Configuration
@ComponentScan("org.baeldung.jdbc")
public class SpringJdbcConfig {
    @Bean
    public DataSource mysqlDataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/springjdbc");
        dataSource.setUsername("dev_user");
        dataSource.setPassword("dev_password");
        return dataSource;
    }
}

Q23. 如何在Spring中启用事务?有什么优势?

两种配置方式

  1. 注解驱动(推荐)
  2. AOP配置

核心优势官方文档):

  • 统一JTA/JDBC/Hibernate/JPA等事务API
  • 支持声明式事务管理
  • 提供比JTA更简单的编程式事务API
  • 与Spring数据访问抽象无缝集成

Q24. 什么是Spring DAO?

Spring DAO提供对JDBC/Hibernate/JPA等数据访问技术的一致性支持,简化数据层开发。

📖 深入学习:Spring持久化系列

5. Spring面向切面编程

Q25. 什么是AOP?

AOP通过切面(Aspect)将横切关注点(如事务管理)模块化,在不修改源代码的情况下增强现有功能。

🌰 示例:基于AOP的执行时间日志

Q26. AOP中的核心概念是什么?

术语 定义
切面(Aspect) 实现横切关注点的类(如事务管理)
通知(Advice) 在特定连接点执行的代码
切入点(Pointcut) 匹配连接点的表达式
连接点(JoinPoint) 程序执行中的特定点(如方法执行)

Q27. 什么是织入(Weaving)?

织入是将切面与其他应用类型/对象链接创建被通知对象的过程。Spring AOP在运行时执行织入(与纯Java AOP框架一致)。

6. Spring 5

Q28. 什么是响应式编程?

响应式编程构建非阻塞、事件驱动的应用,通过少量线程实现高扩展性,核心特性是背压(Back Pressure)防止生产者淹没消费者。

主要优势

  • 提升多核CPU资源利用率
  • 减少序列化开销提升性能

❗ 注意:响应式编程≠响应式系统(架构风格),但可用于实现响应式宣言要求的四大特性:

  1. 响应式(Responsive)
  2. 容错性(Resilient)
  3. 弹性(Elastic)
  4. 消息驱动(Message-driven)

Q29. 什么是Spring WebFlux?

WebFlux是Spring 5的响应式Web框架,作为Spring MVC的替代方案。整个技术栈采用非阻塞设计实现高扩展性。

📚 深入学习:Spring 5 WebFlux教程

Q30. Mono和Flux类型是什么?

WebFlux基于Reactor实现,提供两种核心类型:

  • Mono:表示0-1个异步值
    public abstract class Mono<T> implements Publisher<T> {...}
    
  • Flux:表示N个异步值流
    public abstract class Flux<T> implements Publisher<T> {...}
    

关键特性

  • 实现Reactive Streams的Publisher接口
  • 惰性执行(调用subscribe()才触发)
  • 不可变(操作返回新实例)

Q31. WebClient和WebTestClient有什么用?

组件 用途
WebClient 响应式HTTP客户端,支持非阻塞请求、背压、Java 8 lambda
WebTestClient 测试专用客户端,可:
• 通过HTTP连接服务器
• 直接绑定WebFlux应用(无需HTTP服务器)

Q32. 使用响应式流有什么缺点?

⚠️ 主要挑战:

  1. 调试困难(参考:响应式流调试指南
  2. 响应式数据存储支持有限(传统关系数据库尚未完全支持)
  3. 学习曲线陡峭

Q33. Spring 5兼容旧版Java吗?

❌ 不兼容!Spring 5代码库基于Java 8重构,最低要求JDK 8。

Q34. Spring 5如何集成JDK 9模块化?

Spring 5全面模块化,避免导入无用JAR。示例:

模块定义(HelloWorldModule):

module com.hello {
    export com.hello;
}

客户端模块

module com.hello.client {
    requires com.hello;
}

使用示例

public class HelloWorldClient {
    public static void main(String[] args){
        HelloWorld helloWorld = new HelloWorld();
        System.out.println(helloWorld.sayHello()); // 输出: HelloWorld
    }
}

Q35. 同一应用能同时使用Web MVC和WebFlux吗?

❌ 不能同时使用!原因:

  1. Spring Boot根据classpath依赖自动配置,只能二选一
  2. Spring MVC无法运行在Netty上
  3. MVC(阻塞式)与WebFlux(非阻塞式)设计理念冲突

7. 结论

本文系统梳理了Spring框架核心面试题,涵盖从基础概念到Spring 5新特性。掌握这些内容将显著提升面试成功率,祝求职顺利!


原始标题:Top Spring Framework Interview Questions