2025 年 Top 80 Spring MVC 面试题
以下是用于应届毕业生和有经验的候选人的 Spring MVC 面试问题及答案,以帮助他们找到梦想的工作。
应届毕业生的 Spring MVC 面试问题
1) Spring 是什么?
Spring 被认为是一个框架,可以帮助 Java 程序员进行代码开发,它提供了 IOC 容器、依赖注入器、MVC 流程以及许多其他 API 给 Java 程序员。
2) 什么是 Advices (通知)?
这是方面 (aspect) 的执行。通知就像让你的应用程序学习一项新技巧。它们通常在连接点 (joinpoints) 引入。
👉 免费 PDF 下载:Spring MVC 框架面试问题及答案
3) Spring 框架中 bean 的默认作用域是什么?
Spring 框架中 bean 的默认作用域是 Singleton (单例)。
4) Spring 支持哪些类型的事务管理?
Spring 支持的事务管理包括:
- 声明式事务管理。
- 编程式事务管理。
5) Spring 框架中的 Singleton Bean 是线程安全的吗?
否,Spring 框架中的 singleton bean 不是线程安全的。
6) Spring 框架有哪些优点?
以下是 Spring 框架 的优点:
- 广泛使用组件
- 可重用性
- 解耦
- 通过使用单例、工厂、服务定位器等模式实现,减少编码工作量
- 移除泄露的连接
- 声明式事务管理
- 易于与第三方工具和技术集成。
7) Bean Factory 是什么?
Bean Factory 是 Spring 框架的核心,它是一个轻量级容器,负责加载 bean 定义并管理你的 bean。Bean 通过 XML 文件配置,并管理单例定义的 bean。它还负责生命周期方法并注入依赖。它还消除了临时单例和工厂。
8) 定义 Bean Wiring (Bean 装配)?
Bean Wiring 是在特定 Spring 容器中,创建应用程序组件之间的关联,即 bean 之间的关联。
9) 什么是 Spring MVC?
Spring MVC 是一个共享的控制器实例,用于处理请求类型控制器和在 IoC 容器中运行的拦截器。它还允许多个 Dispatcher Servlet 共享应用程序上下文接口,但不共享类接口。
10) 为什么需要 Spring 框架?
需要 Spring 框架因为它:
- 非常轻量级的容器
- 框架
- IOC (控制反转)
- AOP (面向切面编程)
11) Spring 框架中使用的各种模块有哪些?
- AOP 模块 (面向切面编程)
- JDBC 抽象和 DAO 模块
- 核心容器模块
- MVC 框架模块
- 应用程序上下文模块
- O/R 映射集成模块 (对象/关系)
- Web 模块
12) 解释 Spring 中的 RowCallbackHandler?
RowCallbackHandler 在 ResultSet 的每一行都被调用,用于从 ResultSet 读取值。
13) 定义 Application context module (应用程序上下文模块)?
这是一个非常重要的模块,提供各种必要的服务,如 EJB 集成、远程调用、JNDI 访问和调度。它将 Spring 转型为框架。它还通过应用生命周期事件、提供国际化消息和验证的支持来扩展 BeanFactory 的概念。
14) 介绍一下 AOP 模块?
AOP 模块用于为 Spring 应用程序创建切面。它还支持 Spring 中的元数据编程。
15) BeanFactory 接口是什么?
BeanFactory 接口用于提供对象创建的配置框架和对象管理的基本功能。
16) 说明 Spring 中 ApplicationContext 和 BeanFactory 的区别?
- ApplicationContext 允许存在多个配置文件,而 BeanFactory 只允许一个。
- ApplicationContext 可以将事件发送给注册为侦听器的 bean。BeanFactory 不支持此功能。
- ApplicationContext 还提供对应用生命周期事件、国际化消息和验证的支持,并提供 EJB 集成、远程调用、JNDI 访问和调度等服务。BeanFactory 也不支持这些功能。
17) 什么是 Auto Wiring (自动装配)?
Autowiring 用于构建协作 bean 之间的关系。Spring 容器可以自动解析 bean 的协作者。
18) 自动装配的不同模式有哪些?
自动装配有五种不同的模式:
- no:不自动装配
- byName:通过属性名进行自动装配
- byType:按属性类型进行自动装配
- constructor:类似于 byType,在构造函数中进行属性自动装配
- autodetect:Spring 允许从 byType 或 constructor 中选择自动装配
19) 如何开始使用 Spring?
开始使用 Spring 需要执行以下步骤:
- 从 Spring 网站下载 Spring 及其依赖文件。
- 创建应用程序上下文 XML 来定义 bean 及其依赖。
- 将应用程序上下文 XML 与 web.xml 集成。
- 部署并运行应用程序。
20) Bean 的生命周期方法有哪些?
Bean 的生命周期有两个重要的方法:
- Setup – bean 加载到容器时调用
- Teardown – bean 从容器卸载时调用
21) 侦听器的不同事件类型有哪些?
以下是侦听器的不同事件类型:
- ContextClosedEvent – 当上下文关闭时调用此事件。
- ContextRefreshedEvent – 当上下文初始化或刷新时调用此事件。
- RequestHandledEvent – 当 Web 上下文处理请求时调用此事件。
22) 单例 bean 和原型 bean 有何区别?
Singleton 意味着每个对象实例只定义一个 bean,而 Prototype 意味着在 Spring 中一个定义可以对应多个对象实例。
23) 依赖注入的类型有哪些?
Spring 框架支持两种类型的依赖注入:
- Setter 注入
- 构造函数注入
24) 介绍一下 Core container module (核心容器模块)?
核心容器模块负责 Spring 框架的基本功能。整个 Spring 框架都是以这个模块为基础构建的。
25) AOP 模块是什么?
此 AOP 模块用于 Spring 启用的应用程序。提供了对 AOP alliance 的支持,以确保 Spring 和其他 AOP 框架之间的互操作性。
它指示 Spring 将注解添加到源代码中,并告诉如何应用切面。
有经验的 Spring MVC 面试问题
26) 什么是 AOP Alliance?
AOP Alliance 是一个旨在推广 AOP 采用的开源项目。AOP Alliance 的目标是定义一组通用的组件和接口,以提高不同 AOP 实现之间的互操作性。
27) 什么是 Spring 配置文件?
Spring 配置文件是一个 XML 文件,其中包含类信息。它还描述了这些类如何配置以及它们如何相互交互。
28) 自动装配的类型有哪些?
有四种不同的自动装配类型:
- byName
- byType
- constructor
- autodetect
29) Spring 支持哪些类型的事务管理?
Spring 支持的事务管理类型包括:
- 声明式
- 编程式
30) 何时使用声明式和编程式事务管理?
当只有少量事务操作时,建议使用编程式事务管理。但当需要处理大量事务操作时,则首选声明式事务管理。
31) 什么是 IOC?
IOC (控制反转模式) 也称为依赖注入。IOC 指导程序员描述如何创建对象,而不是实际创建它们。但在这种设计模式中,这个控制权已交给汇编器,汇编器会在需要时实例化所需的类。
32) 介绍一下与侦听器相关的不同类型的事件?
与侦听器相关的不同类型的事件是:
- ContextRefreshedEvent – 当上下文刷新或初始化时调用。
- RequestHandledEvent – 当 Web 上下文处理请求时调用。
- ContextClosedEvent – 当上下文关闭时调用。
33) 什么是 Aspect (切面)?
Aspect 也称为日志记录,是整个应用程序所必需的。使用 AOP 的日志记录或切面是应用程序中的一个横切关注点 (cross cutting functionality)。
34) 什么是 Joinpoint (连接点)?
切面可以在应用程序中引入的点称为连接点。这个点可以是字段被修改、方法被调用,甚至异常被抛出。在这些点,可以添加新的切面代码来为应用程序引入新的行为。
切面代码可以在应用程序的正常流程中插入到这个点,以改变当前的行为。
35) 什么是 Advice (通知)?
Advice 会告诉应用程序新的行为,它是切面的实现。它被插入到应用程序的连接点。
Advice 是切面的实现。它就像告诉你的应用程序新的行为。通常,Advice 会在连接点插入到应用程序中。
36) 什么是 Pointcut (切点)?
Pointcut 用于允许在哪里应用 Advice。
37) 什么是 Weaving (织入)?
Weaving 通过将切面应用到目标对象来创建新的代理对象。
38) 单例 bean 和原型 bean 有什么区别?
Singleton Bean – 每个 Spring IOC 容器只有一个 bean 定义对应一个对象实例。
Prototype Bean – 每个 Spring IOC 容器有一个 bean 定义对应任意数量的对象实例。
39) 可以在哪些点应用织入?
以下是织入可以应用的点:
- 编译时
- 类加载时
- 运行时
40) 自动代理的类型有哪些?
以下是自动代理的类型:
- BeanNameAutoProxyCreator
- DefaultAdvisorAutoProxyCreator
- Metadata autoproxying (元数据自动代理)
41) 如何将 bean 设为单例或原型?
bean 标签有一个名为 ‘singleton’ 的属性。如果其值为 ‘TRUE’,则 bean 为单例,否则 bean 为原型。
42) 使用哪些类来控制数据库连接?
以下是用于控制数据库连接的类:
- Data Source Utils
- SmartData Source
- AbstractData Source
- SingleConnection DataSource
- DriverManager DataSource
- TransactionAware DataSourceProxy
- DataSource TransactionManager
43) 描述 Spring 框架中的 DAO?
DAO 用于提供 Java 数据库连接和对象关系映射对象的集成。Spring 框架的 DAO 提供 JDBC、hibernate、JDO、JPA、Common client interface 和 Oracle 的连接。
44) 什么是 Autoproxying (自动代理)?
Autoproxying 用于为 Spring 用户自动创建代理。它提供以下两个类来支持这种自动代理创建:
- BeanNameAutoProxyCreator
- DefaultAdvisorAutoProxyCreator
45) 什么是 Metadata Autoproxying (元数据自动代理)?
Metadata Autoproxying 可以在 Spring 中进行,由元数据驱动。这由源级别属性决定,并将元数据保留在源代码中。
这在一个地方维护元数据,主要用于声明式事务支持。
46) Spring 中的 ‘Throws advice’ 是什么?
‘Throws Advice’ 定义了发生异常时的行为。它是一个接口,没有需要实现的方法。
实现此接口的类应具有以下签名的方法:
- Void samplethrow (Throw tablet)
- Void samplethrow(Method m, Object[] o, Object target, Throw tablet)
47) Spring 工作中使用的各种编辑器有哪些?
Spring 框架提供的各种自定义编辑器是:
- PropertyEditor
- URLEditor
- ClassEditor
- CustomDateEditor
- FileEditor
- LocaleEditor
- StringArrayPropertyEditor
- StringTrimmerEditor
48) Spring 框架有哪些优点?
以下是 Spring 框架的优点:
- 分层架构
- 支持 Plain Old Java Object (POJO) 编程,支持持续集成和可测试性。
- 依赖注入和控制反转,简化了 JDBC。
- 开源框架,可用于商业目的。
49) 如何使用 Spring 框架访问 Hibernate?
Hibernate 可以通过以下两种方式访问:
- 通过 IOC 和回调函数以及 HibernateTemplate。
- 通过应用 AOP Interceptor 并扩展 HibernateDaoSupport。
50) Spring 2.0 支持哪些通道?
Spring 2.0 版本支持以下通道:
- Pollable Channel (可轮询通道)
- Subscribable Channel (可订阅通道)
- PublishSubscribe Channel (发布-订阅通道)
- Queue Channel (队列通道)
- Priority Channel (优先级通道)
- Rendezvous Channel (会合通道)
- Direct Channel (直接通道)
- Executor Channel (执行器通道)
- Scoped Channel (作用域通道)
有 5 年以上经验的 Spring MVC 面试问题
51) 为什么在 Spring 中首选声明式事务管理?
声明式事务管理对应用程序代码的影响最小,因此是理想的轻量级容器。
52) 解释 BeanFactory 的概念?
BeanFactory 应用了工厂模式的思想,利用 IOC 将应用程序的依赖和配置与实际代码分离。
53) Spring bean 的作用域有哪些?
Spring bean 的作用域有 Singleton、prototype、request、session 和 global session。
54) 通过 Spring 访问 Hibernate 的所有方式是什么?
通过 Spring 访问 Hibernate 有两种方式:
- 通过带有 Hibernate Template 和 Callback 的控制反转 (Inversion of Control)
- 通过扩展 HibernateDAOSupport 并应用 AOP Interceptor 节点。
55) struts 应用程序如何与 Spring 集成?
struts 应用程序可以与 Spring 集成有两种选择:
配置 Spring 使用 ContextLoader 插件管理 Bean,并在 Spring 上下文文件中设置它们的依赖关系。
通过 agetwebapplicationcontext()
显式获取 Spring 管理的 Bean。
56) 什么是控制反转 (IOC)?
控制反转 (IOC) 也称为依赖注入,它是一种设计模式,将类的组装控制权交给外部组件。通常,类会在需要时实例化另一个类。
但在这种设计模式中,这种控制权已交给组装器,组装器会在需要时实例化所需的类。
57) 写出使用 IOC 的好处?
依赖注入或 IOC 的主要好处是它减少了应用程序所需的编码量。这使得应用程序的测试可以快速轻松地进行,因为不需要 JNDI 查找机制或单例。IOC 容器还支持服务的懒加载和急切安装。
58) 什么是内部 bean?内部 bean 的缺点是什么?
如果一个 bean 元素在装配 bean 时直接嵌入到一个 property 标签中,那么这个 bean 就称为内部 Bean。它的缺点是它不能被重新处理。
59) Spring 中有哪些不同类型的注入?
Spring 中有三种类型的注入:
- Setter 注入
- 构造函数注入
- Getter 或方法注入
60) Spring 框架有哪些优点?
以下是 Spring 框架的优点:
- 与 j2EE 容器相比,轻量级容器。
- 内置 Web MVC 框架。
- 创建松耦合的应用程序。
- 支持面向切面编程,如日志记录、事务和安全。
- 配置以 XML 格式完成,易于编写和理解。
61) Advice 的类型有哪些?
有五种类型的 Advice:
- Before Advice (前置通知)
- After returning advice (后置返回通知)
- After throwing advice (后置异常通知)
- Finally advice (最终通知)
- Around advice (环绕通知)
62) PreparedStatementCreator 是什么?
PreparedStatementCreator 是编写数据库数据最常用的接口之一。createPreparedStatement() 是一个方法,可以使用 Connection 参数来创建和返回 PreparedStatement,并且异常处理会自动处理。实现此接口时,也可以实现另一个接口 SqlProvider,其中有一个名为 getSql() 的方法。此方法用于向 JdbcTemplate 提供 sql 字符串。它不处理 SQLExceptions。
63) SQLProvider 是什么?
SQLProvider 只有一个名为 getSql()
的方法,并且它是使用 PreparedStatementCreator 实现者实现的。它主要用于调试。
64) 介绍一下 BatchPreparedStatementSetter?
BatchPreparedStatementSetter 用于一次更新多行,可以使用 BatchPreparedStatementSetter。此接口提供两个方法:
- setValues( PreparedStatement ps, int i) throws SOL exception
- int getBatchSize
65) 在 Spring 中使用 JDBC 的最佳方法是什么?
如果使用 JdbcTemplate 类进行 JDBC 操作,可以获得更好的性能。
66) Spring 中的 DAO 类使用什么异常?
在 Spring DAO 类中只抛出 SQLException。
67) 解释使用 DAO 模块的优点?
使用 DAO 模块可以使数据库代码保持干净简洁。这有助于防止因数据库资源关闭处理不当而引起的问题。此外,DAO 模块利用 AOP 模块使 Spring 应用程序中的对象能够使用事务管理服务。
68) Spring 框架中使用的主要 ApplicationContext 实现有哪些?
它们是
- ClassPathXmlApplicationContext
- FileSystemXmlApplicationContext
- XmlWebApplicationContext
69) 如何将 bean 添加到 Spring 应用程序?
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"> <beans> <bean id="foo"/> <bean id="bar"/> </beans>
bean 标签有一个 ID 属性用于存储 bean 名称,以及一个 class 属性用于指定完整的类名。
70) 什么是 ORM 集成模块?
Spring 通过实现 ORM 模块来支持对象/关系映射 (ORM) 工具,而不是直接使用 JDBC。Spring 可以集成各种重要的 ORM 框架,包括 JDO、iBATIS SQL Maps 和 Hibernate。
71) 提及并解释 Spring 中 Advice 的类型?
Advice 的类型包括:
- Before advice (前置通知):在连接点执行之前调用的 Advice 称为“前置通知”。
- After returning advice (后置返回通知):在连接点正常完成后执行的 Advice 称为“后置返回通知”。
- After throwing advice (后置异常通知):仅在方法因抛出异常而异常退出时执行的 Advice 称为“后置异常通知”。
- After (finally) advice (最终通知):无论连接点如何退出,都会执行的 Advice 称为“最终通知”。
- Around advice (环绕通知):包围连接点的 Advice,例如方法调用,称为“环绕通知”。它可用于在方法调用之前和之后执行特殊活动。
72) Web 模块是什么?
Web 模块使得无需 XML 即可创建 Web 应用程序。使用 Web 模块需要配置 web.xml 文件。
73) DataAccessException 是什么?
DataAccessException 是一个 RuntimeException。它是一个未检查异常。用户不能强制处理这些类型的异常。
74) XmlBeanFactory 是什么?
Spring 包含 BeanFactory 的多个实现。其中,org.springframework.beans.factory.xml.XmlBeanFactory 是一个非常重要的实现。它根据 XML 文件中存储的定义加载 bean。要创建 XmlBeanFactory,需要将 java.io.InputStream 传递给构造函数。InputStream 向工厂提供 XML。例如,要检索 bean,可以通过传递所需 bean 的名称来调用 getBean() 方法。
MyBean helloBean = (MyBean) factory.getBean("helloBean");
75) 请说出与应用程序抛出的异常相关的异常类?
它是 org.springframework.dao.DataAccessException 提供的 DataAccessException。
76) Mention the types of lOC (dependency injection) (提及 IOC (依赖注入) 的类型)?
IOC 的不同类型是:
- Setter Injection:通过 JavaBeans 属性进行注入。
- Constructor Injection:依赖项以构造函数参数的形式提供。
- Interface Injection:通过接口进行注入。
在这三者中,Spring 只使用构造函数注入和 Setter 注入。
77) 重要的 Bean 生命周期方法有哪些?
总共有两个 Bean 生命周期方法。第一个方法是 setup 方法,在 Bean 加载到容器时调用。第二个是 Bean 从容器卸载时调用的 teardown 方法。
78) 如何废除 Bean 的默认生命周期方法?
bean 标签有两个有用的属性,可用于定义特殊的初始化和销毁方法。
例如,可以通过以下方式将 forSetup 和 forTeardown 这两个新方法添加到 Foo 类中:
<beans> <bean id="bar" init-method="forSetup" destroy="forTeardown"/> </beans>
79) Target (目标) 是什么?
目标是被应用 Advice 的类。这个类可以是我们要添加特殊行为的类,也可以是第三方类。目标类可以自由地利用 AOP 概念专注于其主要关注点,而无需考虑应用的任何 Advice。
80) 解释 Proxy (代理) 这个术语?
Proxy 这个术语指的是通过将 Advice 应用于目标对象而产生的对象。
81) Spring AOP 中的 cross cutting concern (横切关注点) 和 concern (关注点) 是什么?
- Cross cutting concern (横切关注点):是指贯穿整个应用程序的关注点,它影响着整个应用程序。例如,安全、日志记录和数据传输是几乎所有应用程序模块都需要关注的。
- Concern (关注点): Concern 是我们希望在应用程序模块中拥有的行为。我们感兴趣的问题定义了我们的关注点。
这些面试问题也将有助于您的口试