MST

星途 面试题库

面试题:Java Spring框架中Bean的作用域有哪些,默认的作用域是什么?

请详细阐述Java Spring框架中Bean的各种作用域,并说明默认的作用域及其应用场景。
48.9万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

1. 单例(Singleton)

  • 定义:在整个Spring容器中,只存在一个Bean实例。当多次请求获取该Bean时,返回的都是同一个实例。
  • 配置方式:默认就是单例作用域,一般无需额外配置。在XML配置中可显式指定<bean id="exampleBean" class="com.example.ExampleBean" scope="singleton"/>;在Java配置中,@Bean注解默认也是单例。
  • 应用场景:适用于无状态的Bean,如工具类、服务层组件等。例如,一个负责日志记录的Bean,它不需要维护自身状态,多个地方使用同一个实例既节省资源又能保证日志记录的一致性。

2. 原型(Prototype)

  • 定义:每次请求获取Bean时,都会创建一个新的实例。
  • 配置方式:XML配置<bean id="exampleBean" class="com.example.ExampleBean" scope="prototype"/>;Java配置可通过@Scope("prototype")注解,如@Bean @Scope("prototype") public ExampleBean exampleBean() { return new ExampleBean(); }
  • 应用场景:适用于有状态且不同实例间状态相互独立的Bean。比如一个处理用户会话的Bean,每个用户的会话状态是不同的,需要为每个请求创建新的实例。

3. 请求(Request)

  • 定义:在一次HTTP请求中,只存在一个Bean实例,不同请求会创建不同的实例。仅适用于Web应用。
  • 配置方式:XML配置<bean id="exampleBean" class="com.example.ExampleBean" scope="request"/>;Java配置@Bean @Scope("request") public ExampleBean exampleBean() { return new ExampleBean(); }
  • 应用场景:当需要在一次请求范围内共享数据时使用。例如,在处理一个HTTP请求时,可能需要在多个组件间共享一些请求特定的数据,如用户登录信息等。

4. 会话(Session)

  • 定义:在一个HTTP会话中,只存在一个Bean实例,不同会话会创建不同的实例。仅适用于Web应用。
  • 配置方式:XML配置<bean id="exampleBean" class="com.example.ExampleBean" scope="session"/>;Java配置@Bean @Scope("session") public ExampleBean exampleBean() { return new ExampleBean(); }
  • 应用场景:用于在用户会话期间保持状态的Bean。比如用户购物车功能,在整个用户会话过程中,购物车这个Bean实例应该是唯一的,不同用户的会话对应不同的购物车实例。

5. 全局会话(GlobalSession)

  • 定义:仅在Portlet应用中有意义,在一个全局会话中,只存在一个Bean实例。对于非Portlet的Web应用,等同于session作用域。
  • 配置方式:XML配置<bean id="exampleBean" class="com.example.ExampleBean" scope="globalSession"/>;Java配置@Bean @Scope("globalSession") public ExampleBean exampleBean() { return new ExampleBean(); }
  • 应用场景:Portlet应用中,在全局会话范围内共享数据。

默认作用域及其应用场景

  • 默认作用域:单例(Singleton)。
  • 应用场景:由于大多数情况下,组件不需要维护自身状态,如业务逻辑处理的服务类、数据访问层的DAO类等,使用单例作用域可以提高系统性能,减少资源开销,因为只创建一个实例供整个应用使用。