Java面试题更新 2026-08-05

在 Spring 框架中,Bean 的作用域具体划分成哪几种类型?

后端开发技术原理

考察说明

考察对 Spring Bean 作用域类型及其适用场景的掌握程度。

回答思路

  1. 【回答框架 1】Spring 容器中的 Bean 作用域定义了 Bean 实例的创建范围和生命周期。核心作用域有五种:singleton、prototype、request、session 和 application。singleton 是默认作用域,容器中每个 Bean 定义对应一个实例,适合无状态或共享对象;prototype 每次获取都创建新实例,适合有状态且需要独立使用的对象。
  2. 【回答框架 2】request、session 和 application 作用域主要适用于 Web 应用环境。request 作用域每个 HTTP 请求创建一个实例;session 作用域每个 HTTP 会话共享一个实例;application 作用域在整个 ServletContext 生命周期内共享一个实例。除此之外,Spring 还支持自定义作用域,通过实现 Scope 接口并注册到容器来扩展。
  3. 【回答框架 3】在实际使用时,需要根据 Bean 的状态和共享需求选择作用域。无状态 Bean 常用 singleton 以节省资源,有状态 Bean 应根据并发和生命周期需求选择 prototype 或 Web 作用域。对于 Web 作用域的 Bean,注入到 singleton 或其他长生命周期 Bean 时需注意作用域代理配置,否则会抛出异常或无法正确获取实例。
  4. 【回答框架 4】选择作用域时还要考虑性能开销和线程安全。singleton 实例存在并发访问问题,需保证线程安全;prototype 每次创建带来创建和销毁开销,不适合频繁获取的场景。Web 作用域依赖 HTTP 环境,非 Web 应用使用会报错。
  5. 【关键点 1】Spring 提供五种核心 Bean 作用域:singleton、prototype、request、session、application。
  6. 【关键点 2】singleton 是默认作用域,容器内只创建一个实例,适合无状态 Bean。
  7. 【关键点 3】prototype 每次获取创建新实例,适合有状态且独立使用的对象。
  8. 【关键点 4】request、session、application 作用于 Web 环境,分别对应请求、会话和应用生命周期。
  9. 【关键点 5】可通过实现 Scope 接口自定义作用域,但需注册到容器中。
  10. 【易错点 1】混淆 singleton 保证线程安全,实际上需要开发者在 Bean 内部保证线程安全。
  11. 【易错点 2】在非 Web 应用或未配置 Web 环境时使用 request、session 作用域会抛出异常。
  12. 【易错点 3】将短生命周期作用域 Bean 注入到 singleton Bean 时,未使用作用域代理会导致获取到错误的实例。